在首次运行时,将Docker容器卷文件复制到主机

3
使用 docker run 命令创建容器时,是否有一种方法可以自动将文件从 docker 卷复制到挂载的主机目录中?
在运行时:
docker run -d -v /localpath:containerpath image 

在我的/localpath目录中没有复制containerpath中的文件。有没有办法实现这个目标?该镜像包含一个需要在本地开发时在主机上访问的目录。

1
选项 -v 允许在本地主机和容器之间声明共享卷,这样通过本地主机或容器创建的每个文件都将对另一个可见。 - undefined
可能相关:https://dev59.com/XFoV5IYBdhLWcg3wi_WY - undefined
简单:添加一个脚本以任何你想要的方式来执行复制工作。在.bash_profile文件中追加一行来调用该脚本,或者使用你系统的等效方法。 - undefined
2
难:解释为什么你想要这样做 - undefined
我想做的是,对于我们公司的每个网站开发项目,自动生成一个Docker镜像,该镜像模拟了我们正在运行的实际环境。 在构建过程中,镜像会克隆特定项目的代码库,并将主机的public_html目录暴露给一个卷,从实际环境加载SQL转储和资源,并将一个卷与该目录一起暴露,这样开发人员只需在本地机器上运行容器,就可以开始编码了。但是为了实现这一点,卷文件需要复制到他设置卷的目录中。 - undefined
在这种情况下:将图像的启动命令更改为将文件复制到映射的目录,然后启动服务器。类似于 ./copyFiles.sh && ./startServer.sh - undefined
1个回答

3
我不知道的是,当我从容器的shell中向卷添加文件时,它也会在主机目录中创建。因此,在进行了大量调试和测试后,我成功地实现了我想要的内容。
为了澄清,如果将来有人需要这样做:自动生成一个docker容器,克隆一个git存储库,并将主机public_html目录暴露给一个卷,其中文件已经复制到主机上,可以准备进行编辑。
# Create Volume for the directory
VOLUME /var/www/html

COPY scripts/start.sh /start.sh
RUN chmod -v +x /start.sh
CMD ["/start.sh"]

start.sh 包含代码,如果目录为空,则克隆 repo 的代码。

#!/bin/bash
if [ "$(ls -A /var/www/html)" ]; then
echo "Directory already cloned"
else
echo "Repo files do not exist" ;
git clone ...
fi

感谢您的帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接