私は自分自身に含まれている単一のDocker画像で実行したいアプリケーションを持っています。 私はUbuntu based imageでうまく動作していましたが、同じスクリプトではAlpineに問題が発生します。ここでBashスクリプトがドッカー画像上でノードを実行できない
は私のドッキングウィンドウのファイルです:
#!/bin/sh
rethinkdb --bind all & sleep 1; node dbCreate.js; sleep 2; nohup node workers/worker.js & node app.js
しかし、私はそれを実行しようとすると、私は次のエラーを取得する:
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スクリプトは比較的簡単です
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フォルダを使用できなくなる可能性がありますか?それはアルパインからの特異性であろうか?
おかげで、
しかし、1つの提案として、すべてのものを単一のドッカー画像に入れないでください。 'microservices'と考えてください - 単一のドッカーコンテナは1つのことをすべきです。 NodeJSアプリケーション用のコンテナとRethinkDB用のコンテナが必要です。これらのコンテナを簡単にオーケストレーションするには、 'docker-compose'を使用します。つまり、ドッカーベースのアプリケーションが動作するはずです。 – huygn
ねえ@HuyGiang。はい、あなたはまったく正しいです、それは私たちもやりたいことです。これは必要な中間ステップと考えてください:)。 – jlengrand
イメージをビルドするのがはるかに簡単なので、ノードとRethinkDBの両方の公式イメージがあり、カスタム起動スクリプトなしでノードコンテナを簡単にデバッグできます。 – huygn