首页 > 解决方案 > Docker撰写不安装卷?

问题描述

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

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

有任何想法吗?

标签: dockerdocker-composegogs

解决方案


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

docker volume create gogs-data

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

  volumes:
    gogs-data:
      external: true

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

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

或者甚至更好地使用环境变量来为更动态的 docker compose 设计设置卷名,如下所示:

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

然后像这样启动你的 docker compose:

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

希望这会有所帮助,如果您想了解更多信息,这里还有一个指向 docker compose 外部卷文档的链接:https ://docs.docker.com/compose/compose-file/#external

您几乎可以将所有东西都放在外部,包括连接到其他 docker compose 容器的容器链接。


推荐阅读