如何使用 docker-compose 将 docker 容器目录映射到主机?

Chr*_*ldi 12 docker docker-compose

鉴于以下 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
Run Code Online (Sandbox Code Playgroud)

这导致./config文件夹被映射到容器nginx-reverse-proxy,因此在/etc/nginx容器内的空目录中。

目标
将文件夹容器映射主机。在我容器/etc/nginx 主机的示例中./config

我当前的搜索不断导致将目录主机映射容器(我不想要)。

任何提示/解决方案表示赞赏。谢谢!

我目前的解决方案是丑陋的:我创建容器与码头工人和复制文件/etc/nginx./config。删除容器并使用docker-compose up作品并nginx开始,因为所需的文件已经在主机上。

编辑:该文件夹在创建时不存在。Docker compose 正在创建文档中所述的文件夹。

Tyh*_*hal 8

阅读自:Dockers 卷页

与绑定安装相比,卷有几个优点:

新卷的内容可以由容器预先填充。


所以一个简单的 docker-compose(在一个名为 nginx 的文件夹中):

version: "3.7"
volumes:
  xmpl:

services:
  testnginx:
    image: nginx:stable
    volumes:
      - xmpl:/etc/nginx
Run Code Online (Sandbox Code Playgroud)

将通过以下方式生成主机系统上的所有文件:

$ docker-compose up
$ docker inspect nginx_xmpl
...
"Mountpoint": "/var/lib/docker/volumes/nginx_xmpl/_data"
Run Code Online (Sandbox Code Playgroud)

然后您可以查看主机上的文件:

# 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
Run Code Online (Sandbox Code Playgroud)

最后从./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
Run Code Online (Sandbox Code Playgroud)