如果运行此命令,卷将挂载,并且容器将按预期状态启动,并具有初始化状态:
docker run --name gogs --net mk1net --ip 203.0.113.3 -v gogs-data:/data -d gogs/gogs
但是,如果我运行相应的docker-compose
脚本,则卷不会挂载。容器仍会启动,但不会显示启动时的状态。
version: '3'
services:
gogs:
image: gogs/gogs
ports:
- "3000:3000"
volumes:
- gogs-data:/data
networks:
mk1net:
ipv4_address: 203.0.113.3
volumes:
gogs-data:
networks:
mk1net:
ipam:
config:
- subnet: 203.0.113.0/24
有什么想法吗?
答案 0 :(得分:1)
看看您的命令,gogs-data
卷是在docker compose文件之外定义的,可能使用的是类似的东西:
docker volume create gogs-data
如果是这样,则需要将其指定为docker compose文件中的外部文件,如下所示:
volumes:
gogs-data:
external: true
您还可以为外部卷定义一个不同的名称,并在docker compose文件中继续使用当前卷名,以避免命名冲突,例如,假设您的项目是销售汽车,因此您希望外部卷成为调用selling-cars-gogs-data
,但要使其在docker compose文件中保持简单gogs-data
,那么您可以执行以下操作:
volumes:
gogs-data:
external:
name: selling-cars-gogs-data
或者甚至更好地使用环境变量来为更动态的docker compose设计设置卷名,如下所示:
volumes:
gogs-data:
external:
name: "${MY_GOGS_DATA_VOLUME}"
然后像这样启动您的docker组合:
env MY_GOGS_DATA_VOLUME='selling-cars-gogs-data' docker-compose up
希望这会有所帮助,如果您想了解更多信息,这里也提供了docker compose外部卷文档的链接:https://docs.docker.com/compose/compose-file/#external
您几乎可以将所有外部事物,包括容器链接以连接到其他docker compose容器。