【问题标题】:Issue in docker compose with volume undefineddocker compose 中的问题,卷未定义
【发布时间】:2021-12-27 19:42:32
【问题描述】:

当我运行 docker-compose up 时出现以下错误,请指出为什么会出现此错误

服务 "mysqldb-docker" 指的是未定义的卷 mysqldb: invalid compose project

另外,有没有办法将 CLI 中的 $ENV 值传递给 docker-compose up ,目前我有一个 ENV 变量,它指定了我用来指定数据库名称的 dev、uat 或 prod。除了为此显式创建 .env 文件之外,还有更好的替代方法吗

 version: '3.8'
    services:
      mysqldb-docker:
        image: '8.0.27'
        restart: 'unless-stopped'
        ports:
          - "3309:3306"
        environment:
          - MYSQL_ROOT_PASSWORD=root
          - MYSQL_PASSWORD=root
          - MYSQL_DATABASE=reco-tracker-$ENV
        volumes:
          - mysqldb:/var/lib/mysql
      reco-tracker-docker:
        image: 'reco-tracker-docker:v1'
        ports:
          - "8083:8083"
        environment:
          - SPRING_DATASOURCE_USERNAME=root
          - SPRING_DATASOURCE_PASSWORD=root
          - SPRING_DATASOURCE_URL="jdbc:mysql://mysqldb-docker:3309/reco-tracker-$ENV"
        depends_on: [mysqldb-docker]

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    您必须像这样在顶层定义volumes

    version: '3.8'
    
    services:
      mysqldb-docker:
        # ...
        volumes:
          - mysqldb:/var/lib/mysql
    
    volumes:
      mysqldb:
    

    【讨论】:

      【解决方案2】:

      您可以使用“环境”键将环境变量从 shell 直接传递到服务的容器,但不给它们一个值

      https://docs.docker.com/compose/environment-variables/#pass-environment-variables-to-containers

      web:
        environment:
          - ENV
      

      但根据我的测试,您不能在撰写文件中写入 $ENV 并期望它读取您的环境

      为此,您需要以这种方式调用 docker-compose:

      docker-compose run -e ENV web python console.py
      

      看到这个:https://docs.docker.com/compose/environment-variables/#set-environment-variables-with-docker-compose-run

      【讨论】:

        猜你喜欢
        • 2021-12-20
        • 2019-07-15
        • 1970-01-01
        • 2020-02-07
        • 2019-06-03
        • 1970-01-01
        • 2015-08-18
        • 1970-01-01
        • 2019-08-12
        相关资源
        最近更新 更多