使用 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.
中阅读更多内容
我正在使用 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.