0

単一の自己完結型 Docker イメージで実行したいアプリがあります。Ubuntu ベースのイメージでは問題なく動作していましたが、同じスクリプトを使用するとAlpineで問題が発生します。

ここに私のdockerファイルがあります:

FROM julienlengrand/alpine-node-rethinkdb

# Preparing
# RUN ln -snf /bin/bash /bin/sh

# # Define mountable directories.
VOLUME ["/data"]

# # Define working directory.
WORKDIR /data

# # Install app dependencies
COPY package.json /data
RUN npm install

# # Bundle app source
COPY . /data

# # Expose rethinkdb ports.
#   - 8080: web UI
#   - 28015: process
#   - 29015: cluster
EXPOSE 8080
#EXPOSE 28015
#EXPOSE 29015

# Expose node app ports
EXPOSE 4567

CMD [ "/bin/sh", "/data/startApp.sh" ]

私の startApp スクリプトは比較的単純です。

#!/bin/sh
rethinkdb --bind all & sleep 1; node dbCreate.js; sleep 2; nohup node workers/worker.js & node app.js

しかし、実行しようとすると、次のエラーが発生します。

module.js:442
    throw err;
    ^

'rror: Cannot find module '/data/app.js
    at Function.Module._resolveFilename (module.js:440:15)
    at Function.Module._load (module.js:388:25)
    at Module.runMain (module.js:575:10)
    at run (bootstrap_node.js:352:7)
    at startup (bootstrap_node.js:144:9)
    at bootstrap_node.js:467:3

これは、シェルを使用して自動的に実行するか、イメージ内で直接実行するかに関係なく発生します。

確認したところ、すべてがデータ フォルダーに正しく配置されています。さらに、すべてのコマンドを sh シェルで直接実行すると、すべてが期待どおりに実行されます。

また、スクリプトを次のように単純化しようとしました。

#!/bin/sh
rethinkdb --bind all & sleep 1; node dbCreate.js; sleep 2; node app.js

同じ問題が発生します。

何がうまくいかないのでしょうか?startApp スクリプトを使用して実行しているときに /data フォルダーが使用できない原因は何ですか? それはアルパイン特有のものではないでしょうか?

ありがとう、

4

1 に答える 1

1

app.js受け取ったエラー メッセージは、引用符が行の先頭に移動したため、従来のキャリッジ リターンの問題のように見えます。

'rror: Cannot find module '/data/app.js

ノードは通常、両方の行末を処理できるはずですが、シェル スクリプトはそれほど親切ではありません。

\n特定の要件がない限り、通常、すべてのプロジェクト/ファイル/エディター/gitをデフォルトでUnixに設定します。

または質問 jlengrand founddos2unixの回答の 1 つを使用して、既存のファイルを変換できます。好きだからperl -pi -e 's/\r\n/\n/g'pie

于 2016-08-05T07:30:59.700 に答える