给出以下docker-compose.yml设置:
version: '3.7'
services:
reverse:
container_name: nginx-reverse-proxy
hostname: nginx-reverse-proxy
image: nginx:stable
ports:
- 80:80
- 433:433
volumes:
- type: bind
source: ./config
target: /etc/nginx
consistency: consistent
在./config
中将文件夹beeing映射到容器nginx-reverse-proxy
,因此在容器上的空/etc/nginx
目录中。
正如我的问题中所述,目标是查看内容(由图像创建)的容器,并使该内容对在./config
上的主机可见。
我当前的搜索不断地导致如何将Directoy从主机映射到容器(我不想要)。
任何提示/解决方案都值得赞赏。谢谢!
我当前的解决方案很丑:
我使用docker创建了容器,并将文件从/etc/nginx
复制到./config
。删除容器并使用docker-compose up
可以正常工作,并且nginx
开始运行,因为所需的文件已经在主机上。
编辑:创建时不存在该文件夹。 Docker compese正在按照文档中的说明创建文件夹。
答案 0 :(得分:3)
阅读来自:Dockers Volume Page
与绑定安装相比,卷具有几个优点:
新卷可以通过容器预先填充其内容。
因此,一个简单的docker-compose(在名为nginx的文件夹中):
version: "3.7"
volumes:
xmpl:
services:
testnginx:
image: nginx:stable
volumes:
- xmpl:/etc/nginx
将通过以下方式产生主机系统上的所有文件:
$ docker-compose up
$ docker inspect nginx_xmpl
...
"Mountpoint": "/var/lib/docker/volumes/nginx_xmpl/_data"
然后您可以在主机上查看文件:
# ls /var/lib/docker/volumes/nginx_xmpl/_data
conf.d fastcgi_params koi-utf koi-win
mime.types modules nginx.conf scgi_params
uwsgi_params win-utf
最后在 ./ config 中使用它:
# ln -s /var/lib/docker/volumes/nginx_xmpl/_data ./config
# ls config
conf.d fastcgi_params koi-utf koi-win
mime.types modules nginx.conf scgi_params
uwsgi_params win-utf
答案 1 :(得分:0)
据我了解,您想要一种使用docker-compose文件将文件从docker容器传输到主机的方法。您应该尝试如下更改音量:
volumes:
- /path/to/folder/on/container:/host/folder/path
作为参考,您应该看一看已经与您的问题相似的问题:https://stackoverflow.com/a/53930043/12485228
希望对您有帮助。
答案 2 :(得分:0)
通常,这是不可能的,因为容器只是“可运行的映像”,并且像一批zip文件一样存储在fs中。在运行事件中,它们被压平成一个“文件夹”,Linux内核在其中执行chroot
,并使用该根目录启动进程。
可选地,您可以在过程结束时将从主机OS的某些路径映射到chrooted folder
中的某些路径,但不能将路径映射回来。当Docker进行映射时,它会replaces
完全路径,因此路径中的所有现有文件都将从映像fs中“隐藏”,并由映射的主机路径“替换”。
我认为您想看看图像路径的“默认文件配置”。从我的角度来看,有两种方法:
/export
映射到主机的./exported-configs
,然后在容器启动时使用docker exec {.... extra params and docker ps id} bash
进入正在运行的容器并运行类似cp -R /etc/nginx /export/nginx-configs
的内容。这两种方法通常都可以使用,如果我需要图像中的任何文件夹,我都会做第一个。
祝你好运!
答案 3 :(得分:0)
嗯,您不应该按照自己的方式进行映射,因为您说它很丑。 最方便,最轻松的方式是这样的:
位置 / etc / nginx 还包含其他文件(例如mime.types和fastcgi_params),如果您映射主机目录 ./ config ,则这些文件将不存在。 ,当然,除非您将它们复制到主机上,但这不是一个不错的解决方案。
上面,我只是将位于/ nginx / myapp文件夹中的本地nginx.conf文件映射到/etx/nginx/nginx.conf,将已启用本地站点的文件夹映射到目录中的/ etc / nginx / sites-enabled文件夹容器。
使事情尽可能简单会更好,因为Docker已经天生就复杂了。
答案 4 :(得分:-1)
不太可能。 Docker卷已安装到容器中。反之亦然。这里可能的替代方法:https://stackoverflow.com/a/41914917/5586914