码头工人组成不装载卷?

时间:2018-07-24 22:15:19

标签: docker docker-compose gogs

如果运行此命令,卷将挂载,并且容器将按预期状态启动,并具有初始化状态:

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

有什么想法吗?

1 个答案:

答案 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容器。