Docker compose 没有安装卷?

Docker compose not mounting volume?

如果我 运行 此命令,卷安装并且容器以初始化状态按预期启动:

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

有什么想法吗?

查看您的命令,gogs-data 卷是在 docker 撰写文件之外定义的,可能使用类似的东西:

docker volume create gogs-data

如果是这样,那么您需要在 docker 撰写文件中将其指定为外部,如下所示:

  volumes:
    gogs-data:
      external: true

您还可以为外部卷定义不同的名称,并在 docker 撰写文件中继续使用当前卷名称以避免命名冲突,例如,假设您的项目是关于销售汽车的,那么您想要调用外部卷 selling-cars-gogs-data 但希望在 docker 撰写文件中保持简单如 gogs-data,那么您可以这样做:

  volumes:
    gogs-data:
      external:
        name: selling-cars-gogs-data

或者更好地使用环境变量来设置卷名称以获得更动态的 docker 组合设计,如下所示:

  volumes:
    gogs-data:
      external:
        name: "${MY_GOGS_DATA_VOLUME}"

然后像这样开始 docker 撰写:

env MY_GOGS_DATA_VOLUME='selling-cars-gogs-data' docker-compose up

希望这有帮助,如果您想了解更多信息,这里还有一个 link 到 docker 组合外部卷文档:https://docs.docker.com/compose/compose-file/#external

您几乎可以将所有东西都制作成外部的,包括容器 link 连接到其他 docker 组合容器。