私は、ubuntuをインストールするドッカーイメージと、NodeJSのインストールのような追加のコマンドを持っています。docker-composeビルド中にnpm installを実行する際の問題
Dockerfile(docker-compose.yml
と組み合わせて)は、ホスト上のディレクトリにもディレクトリをマウントします。私はdocker-compose up
でコンテナを実行し、その後のマウントsrc/
フォルダ内ls -a
を行うと
VOLUME ["/src"]
WORKDIR /src
:私はボリュームのために次の行を持ってDockerfile
で
services:
test:
build:
context: ../../
dockerfile: docker/Dev/Dockerfile
ports:
- 7000:7000
volumes:
- ./../../src:/src
:それはこのようになりますコンテナの場合は、ホストにも表示されているすべてのファイルが表示されます。ここまでは順調ですね。
(コマンドは、私はコンテナ内で見て、あまりにも実行します:docker exec -it <container hash> ls -a
)
すべてのファイルは、私が私のDockerfile
に新しいRUN
コマンドを追加package.json
含めて、そこにあるように見えるので:npm install
を。それは私にそれがsrc/
フォルダにpackage.json
を見つけることができないというエラーが発生します除き
VOLUME ["/src"]
WORKDIR /src
RUN npm install
:だから私はこれを持っています。私が持っているDockerfile
でそう
私は(私はWORKDIR
でsrc/
フォルダに切り替え、覚えておいてください)RUN ls -a
を追加すると、それはそれは空のディレクトリだことを示しています...
:
VOLUME ["/src"]
WORKDIR /src
# shows that /src is empty. If I do 'RUN pwd', then it shows I really am in /src
RUN ls -a
RUN npm install
しかし、私がdocker-compose up
を実行した後で、ls -a
をコンテナの/src
フォルダ内にもう一度実行すると、すべてのソースファイルが再び表示されます。
私の質問は、ビルド時になぜそこにいないのですか(私はdocker-compose build
を実行しています)?
この問題を解決する方法は何ですか。
私はもう一度一緒に遊んだ。 'COPY'コマンドは' package.json'を '/ src'フォルダにコピーするというトリックを行います。私は 'RUN npm install'を実行することもできます。これは動作します。これは 'node_modules'フォルダを作成することを示しています。しかし、 '' docker-compose up'を実行すると、 '/ src'ディレクトリにある' Dockerfile'の全てを上書きします。私はそれが 'docker-compose.yml'が同じ'/src'フォルダ上で '-v'を実行して、以前のすべての内容を上書きするからです。 – Vivendi
ローカルディレクトリをマウントすると、イメージ内の一致する内容がローカルドライブの内容に置き換えられます。一般的には、開発中にこれを行うだけです。 – jkinkead