3
我在我的Dockerfile中有以下命令序列;通過SED注意更換到位: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
被複制到目標位置,但:
./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,並在它們之間使用';'(並且它避免了幾次RUN,如Dockerfile最佳實踐中所述)https://docs.docker.com/engine/ userguide/CHI-圖像/ dockerfile_best實踐/ – user2915097