我在docker容器中有一个nodejs应用程序。我运行带有v标志的docker容器并将一些主机文件夹映射到docker文件夹,假设主机上的/ opt映射到docker实例上的/ opt。比docker运行node app.js
并且应用程序启动并运行,但是在我运行node app.js
之前我想复制容器内的文件 /opt/kuku.txt 到另一个文件夹 / var / src / application / etc / 。我应该在CMD
指令之前在Dockerfile中执行吗?
答案 0 :(得分:2)
你不能在Dockerfile中这样做......文件还没有在图像构建时。它显然在部署时存在于您的Web服务器上。
你可以通过几种方式解决这个问题......
在容器中创建一个指向文件将在运行时生存的位置的simlink ...
# Dockerfile
RUN ln -s /var/src/application/etc/kuku.txt /opt/kuku.txt
其次,你可以在运行时将文件绑定到正确的位置......
docker run -v /opt:/opt -v /opt/kuku.txt:/var/src/application/etc/kuku.txt myimage
第三,您可以在容器中添加一个处理此
的入口点# entrypoint.sh
cp /opt/kuku.txt:/var/src/application/etc/kuku.txt
exec node server
# Dockerfile
...
COPY entrypoint.sh /app/entrypoint.sh
CMD [entrypoint.sh]