docker-compose怎么把镜像里面的配置文件挂载到宿主机上?

我想要把打包进docker的配置文件夹挂载出来到宿主机上,但是用docker-compose中的volumes属性,是把宿主机的文件夹交给docker镜像使用,如果宿主机文件夹为空,docker内的程序启动读取配置文件就失败了。

我的需求是:我已经把默认的配置文件夹打包进了docker里面了,在编辑docker-compose时想要指定将打包进docker的配置文件夹挂载出来给宿主机,这样后面配置文件要做修改的话,我直接就在宿主机打开配置文件修改了。

我目前知道volumes可以把宿主机的文件交给docker去使用,但是不知道怎么把docker的文件夹交给宿主机,麻烦知道的同学指导一下,感谢大家啦!

阅读 16.4k
9 个回答

在启动脚本, 从容器里的一个目录拷过去不就行了?

# entrypoint.sh
if  ![ -f /work/config.ini ] 
then
  cp /app/config.ini /work/config.ini
fi

本来数据卷就是从宿主机挂载到容器,你这把容器内挂在到宿主机是怎么个意思,你说你把默认的配置文件打包进docker了,默认的配置文件原来在哪?

新手上路,请多包涵

楼主有答案了吗?我也有你这样的需求

没这功能

实在想从host改,可以docker inspect找到那个container的路径进去改

如果需要常改,考虑一下是不是真的应该用docker

启动容器的时候把 ssh 的端口映射出来,然后在宿主机上用 sshfs 可以把容器里的目录挂载出来。

不过 docker 镜像里可能并没有带 ssh 服务,需要自己安装和配置。

打包docker镜像的时候,不要打包配置文件,配置文件采用挂载的方式让容器读取就好了

赞成“东方星痕”的观点,通过容器本身做配置的初始化。

当然docker-composer中照常可以通过volume方式,将配置目录从宿主机挂载只容器中,容器启动脚本,发现挂载进来的配置目录为空或文件不存在,就把默认容器中的配置覆盖过去就可以。后续也可以宿主机上直接编辑修改。

新手上路,请多包涵

使用docker cp命令拷贝出来

运行临时镜像

docker run --rm -it image:latest /bin/sh
containerID:e127

另起一个终端拷贝文件 docker cp e127:/B/config.conf /host/confg.conf
关掉临时的 contannerID:e127 容器

正式启动 docker run -v /host/confg.conf:/B/config.conf image:latest

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏