Docker-compose 多个命名卷挂载失败

7
我将使用docker-compose来构建我的Jenkins容器,但我无法将两个命名卷挂载到一个容器上。以下是我的docker-compose.yml文件内容:
version: '2'
networks:
  nw:
    driver: bridge

volumes:
  jenkins-ansible:
  jenkins-data:

services:
  jenkins:
    image: jenkins
    ports:
      - "801:8080"
    volumes:
      - jenkins-ansible:/var/lib/ansible
      - jenkins-data:/var/jenkins_home
    networks:
      - nw

我运行了docker-compose up -d,容器启动正常,但是当我进入容器并执行df -h时,只显示一个挂载点/var/jenkins_home。

如果我注释掉-jenkins-data:/var/jenkins_home这一行,它会挂载ansible卷。

那么为什么它只挂载了一个卷?我找不到任何关于每个容器只允许挂载一个卷的说明,但事实就是如此。

而且jenkins-data挂载有什么特殊之处,以至于它比jenkins-ansible更优先挂载?(我尝试交换2个挂载行的顺序,没有变化)

提前感谢您的帮助,

Jim

1个回答

6

卷已正确挂载,但是使用df -h命令并未显示。

如果你确实想要查看所有的挂载点,你可以在容器内运行cat /proc/mounts命令,它们会被显示出来:

/dev/sdb /var/jenkins_home ext4 rw,nosuid,nodev,relatime,data=ordered 0 0
/dev/sdb /var/lib/ansible ext4 rw,nosuid,nodev,relatime,data=ordered 0 0

你也可以执行 docker inspect CONTAINER_NAME 命令并查看挂载点,你会看到类似下面的内容:

    "Mounts": [
        {
            "Type": "volume",
            "Name": "tst1_jenkins-ansible",
            "Source": "/data/docker-data/volumes/tst1_jenkins-ansible/_data",
            "Destination": "/var/lib/ansible",
            "Driver": "local",
            "Mode": "rw",
            "RW": true,
            "Propagation": ""
        },
        {
            "Type": "volume",
            "Name": "tst1_jenkins-data",
            "Source": "/data/docker-data/volumes/tst1_jenkins-data/_data",
            "Destination": "/var/jenkins_home",
            "Driver": "local",
            "Mode": "rw",
            "RW": true,
            "Propagation": ""
        }
    ],

可以了!那为什么在 df -h 下没有显示出来呢?谢谢 Constantin。 - Jim ReesPotter
1
@JimReesPotter,“df” 命令总是合并它认为相同的挂载点,参见:https://unix.stackexchange.com/a/195407/156681。 - Constantin Galbenu

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