Dockerfileに次のコマンドシーケンスがあります。Dockerfile COPYはファイルの古いコピーを取りますか?
RUN sed -i "s/replace this/with that/g" ./dir/file.yaml
COPY ./dir/file.yaml /usr/src/app/node_modules/serve-swagger-editor/node_modules/swagger-editor/spec-files/
これは、それが目的の場所にコピーされますfile.yaml
ALMOST良いですが実行されますが、::SEDによって所定の位置に交換を注意し
./dir/file.yaml
は、sedのによって行われた変更が含まれています,/usr/src/.../spec-files/file.yaml
はありません。
それは、この問題を回避するには、COPYの問題を修正することが判明:
RUN sed -i "s/replace this/with that/g" ./dir/file.yaml
RUN cp ./dir/file.yaml /usr/src/app/node_modules/serve-swagger-editor/node_modules/swagger-editor/spec-files/
誰でもこの奇妙な振る舞いを説明しますか?
、または 'RUN'ではsedとcpを'; 'で置き換えます(Dockerfileのベストプラクティスhttps://docs.docker.com/engine/で説明されているように、いくつかのRUNは避けています)。 userguide/eng-image/dockerfile_best-practices / – user2915097