使用 docker-compose 创建名为 docker 的卷?

Create named docker volume with docker-compose?

我正在使用 docker 版本 1.11.2。 我能够创建命名的 docker 卷:

docker volume create --name my-jenkins-volume

然后我可以使用 -v 选项将我的容器与命名卷连接起来:

docker run -d -u jenkins --name jenkins -p 50000:50000 -p 443:8443 -v my-jenkins-volume:/var/jenkins_home

是否可以在 docker-compose 中创建这个命名卷?

我试过这个解决方案并且对我有效

version: '3.1'

services:
  alp:
    image: alpine
    volumes:
        - my-jenkins-volume:/your/local/path
    command: sleep 10000


volumes:
    my-jenkins-volume:
        external: false

external 如果您从外部来源提供卷,则为真,而不是直接从 docker-compose 规范

参考文档 https://docs.docker.com/compose/compose-file/#volume-configuration-reference

是的,这是可能的。事实上,我认为最好在 docker compose 中创建它。 这是我的一个例子 docker-compose.yml:

version: '2'
services:

  db:
    image: mysql
    restart: always
    volumes:
      - "wp-db:/var/lib/mysql:rw"

volumes:
  wp-db: {}

这里,命名卷是"wp-db" 然后,如果你想在另一个 docker-compose.yml 文件中使用你的卷,你可以使用 "external" 关键字:

volumes:
    my-jenkins-volume:
        external: true

(注意:这是在顶级音量关键字中,而不是在服务部分)

使用最新的 compose 版本 (3),您可以自动创建卷。

以你为例:

version: '3'
services:
  jenkins:
    image: jenkins/jenkins
    container_name: 'jenkins'
    volumes:
      - jenkins_home:/var/jenkins_home
    ports:
      - '8080:8080'
      - '50000:50000'
    networks:
      - 'ci'
    environment:
      TZ: 'Europe/Paris'
    restart: unless-stopped
volumes:
  jenkins_home:

如果指定 external: true,则必须使用指定的命令在外部创建卷。

我个人发现long syntax that was added in version 3.2 more clear then the old short syntax

在下面的示例中,我们可以看到 web 服务使用长语法的命名卷 (mydata)。

db 服务也使用名为 dbdata 的命名卷(db 服务卷下的第二个路径),但使用旧的字符串格式定义它以安装命名音量:

version: "3.8"
services:
  web:
    image: nginx:alpine
    volumes: # Long/new syntax below this block
      - type: volume
        source: mydata
        target: /data
        volume:
          nocopy: true

  db:
    image: postgres:latest
    volumes: 
      - "dbdata:/var/lib/postgresql/data" # <--- Short/old syntax

volumes:
  mydata:
  dbdata:

(*) 请注意,命名卷必须列在 top-level 卷键下。
(**) 在 here.

中阅读更多内容