我已经创建了我自己的简单图像。
FROM python:2.7.11
RUN mkdir /extra/later/ \
&& mkdir /yyy
现在我可以执行以下步骤:
docker run -d -v xxx:/yyy myimage:latest
所以现在我的音量安装在容器内。我要访问,我能够在容器内的已安装卷上执行命令:
docker exec -it container_id bash
bash# tar -cvpzf /mybackup.tar -C /yyy/ .
有没有办法在Dockerfile中自动执行这些步骤或在docker run
命令中描述命令?
答案 0 :(得分:1)
Dockerfile中执行的命令构建映像,并且卷附加到正在运行的容器,因此您将无法在Dockerfile本身内运行命令并影响卷。
相反,您应该创建一个启动脚本,该脚本是容器运行的命令(通过Dockerfile中的CMD
或ENTRYPOINT
)。将逻辑放在启动脚本中以检测它是否需要初始化卷,并且它将在启动容器时运行。如果您使用CMD
运行脚本,您将能够使用传递给docker run
的任何命令覆盖运行该脚本,这可能是也可能不是一件好事,具体取决于您的情况。
答案 1 :(得分:0)
尝试使用Dockerfile中的CMD选项来运行tar命令
CMD tar -cvpzf /mybackup.tar -C /yyy/ .
或
CMD ["tar", "-cvpzf", "/mybackup.tar", "-C", "/yyy/", "."]