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

lvt*_*llo 11 docker docker-compose

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

docker volume create --name my-jenkins-volume
Run Code Online (Sandbox Code Playgroud)

比我能够通过以下-v选项将我的容器与named-volume连接:

docker run -d -u jenkins --name jenkins -p 50000:50000 -p 443:8443 -v my-jenkins-volume:/var/jenkins_home
Run Code Online (Sandbox Code Playgroud)

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

Gia*_*Arb 12

我尝试了这种解决方案,对我来说,

version: '3.1'

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


volumes:
    my-jenkins-volume:
        external: false
Run Code Online (Sandbox Code Playgroud)

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

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

  • 感谢您的回答。我尝试了一下,但似乎命名卷必须存在,然后才能执行docker-compose up -d:卷my-jenkins-volume声明为外部卷,但是找不到。我想知道是否可以使用docker-compose创建此命名卷,然后使用它 (3认同)
  • 未来的读者:上面的评论是在答案指出使用“external: true”时写的。这已被修改为“external: false”——如果卷不存在,它将创建该卷。请参阅:https://docs.docker.com/compose/compose-file/07-volumes/#external (3认同)
  • 谢谢。使用`external:false`对我很有用。 (2认同)

Mic*_*OLL 8

使用最新的撰写版本 (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:
Run Code Online (Sandbox Code Playgroud)

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


tou*_*ssa 5

是的,这是可能的。其实我觉得还是在docker compose里面创建比较好。这是我的 docker-compose.yml 之一的示例:

version: '2'
services:

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

volumes:
  wp-db: {}
Run Code Online (Sandbox Code Playgroud)

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

volumes:
    my-jenkins-volume:
        external: true
Run Code Online (Sandbox Code Playgroud)

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


Rtm*_*tmY 5

我个人认为3.2版本中添加的长语法比旧的短语法更清晰。

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

数据库服务还使用名为dbdata(数据库服务卷下的第二个路径)的命名卷,但使用旧的字符串格式定义它来安装命名卷:

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

(*) 请注意,命名卷必须列在顶级卷键下。
(**) 在这里阅读更多内容。