docker compose将装载卷文件传播绑定到主机

docker compose将装载卷文件传播绑定到主机,docker,docker-compose,volumes,compose,Docker,Docker Compose,Volumes,Compose,我已经了解到,当您创建docker compose.yml文件并绑定装载卷时,如果您没有在主机上创建文件夹,则在运行docker compose up时,将自动创建文件夹并用容器文件夹的内容填充该文件夹 以下是报价: 然后您应该卷绑定两个文件夹/etc/nginx是存储所有配置文件的地方,/etc/ssl/private是存储ssl证书的地方。第一次启动容器时,主机上不存在配置文件夹,这一点非常重要。当您通过docker compose启动容器时,它将自动创建文件夹并用容器的内容填充它。如果您在

我已经了解到,当您创建
docker compose.yml
文件并绑定装载卷时,如果您没有在主机上创建文件夹,则在运行
docker compose up
时,将自动创建文件夹并用容器文件夹的内容填充该文件夹

以下是报价:

然后您应该卷绑定两个文件夹/etc/nginx是存储所有配置文件的地方,/etc/ssl/private是存储ssl证书的地方。第一次启动容器时,主机上不存在配置文件夹,这一点非常重要。当您通过docker compose启动容器时,它将自动创建文件夹并用容器的内容填充它。如果您在主机上创建了一个空的config文件夹,它将挂载该文件夹,并且容器中的文件夹将为空

但这似乎对我不起作用。 以下是我检查过的一些东西

  • 我的docker不是以root用户身份运行的。我在我的机器上创建了docker组,并在其中添加了我的用户,因此我不需要运行
    sudocker
  • 我运行一个ubuntu服务器
  • 无论我是否尝试以只读方式绑定和装载卷,这都无关紧要
  • 运行
    docker compose up
    时,它会创建文件夹,但这些文件夹归root用户所有
  • 根用户拥有的已创建文件夹为空
这是我的
docker compose.yml

version: '3'
services:
  nginx:
    image: nginx
    container_name: reverse_nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "./html:/usr/share/nginx/html"
      - "./conf:/etc/nginx"
      - "./ssl:/etc/ssl/private"
    restart: unless-stopped
以下是创建的内容:

icare@icare:~/nginx
$ ls -lR
.:
total 16
drwxr-xr-x 2 root  root  4096 Mar 20 15:46 conf
-rw-r--r-- 1 icare icare  269 Mar 20 15:27 docker-compose.yml
drwxr-xr-x 2 root  root  4096 Mar 20 15:46 html
drwxr-xr-x 2 root  root  4096 Mar 20 15:46 ssl

./conf:
total 0

./html:
total 0

./ssl:
total 0

我在网上找不到一个解决方案,似乎一个人和它已经很难解决了(从容器复制文件,然后绑定挂载所有内容),但我忍不住认为还有另一种方法。或者我下面的教程已经过时或错误了?

我很确定命名卷和绑定装载的行为方式不同,并且绑定装载不会被图像中的内容填充。在任何情况下,我都不会依赖这种行为:这种情况只会在最初创建卷时第一次运行容器时发生,并且当图像内容发生变化时,您需要一些故事来更新卷。我知道它可以与卷一起工作。我想弄清楚的是,教程的作者是否使用了旧版本的docker,绑定挂载的这种行为是否不再可用(因此,我只想继续),或者这是否仍然可以工作,我必须在我这边修复一些东西?无论如何,我完全同意你不要依赖这种行为,至少是为了生产目的。就我而言,这只适用于家中的POC。