【问题标题】:Docker compose shows Invalid port error when I set ports as env variables当我将端口设置为 env 变量时,Docker compose 显示 Invalid port 错误
【发布时间】:2020-01-26 09:50:57
【问题描述】:

我有一个简单的 docker-compose 文件,它可以启动我的 Spring Boot 应用程序。

version: '3'
services:
  applic:
    build:
      context: .
      dockerfile: local.Dockerfile
      args:
        - DEBUG_PORT=${DEBUG_PORT}
        - DEBUG_FLAG=${DEBUG_FLAG}
    environment:
      - "SPRING_PROFILES_ACTIVE=local"
      - "DEBUG_PORT=5005"
      - "DEBUG_FLAG=true"
    ports:
      - "8083:8083"
      - $DEBUG_PORT:$DEBUG_PORT
    depends_on:
      - mysql
    volumes:
      - "../:/mnt"

当我使用docker-compose up --build 命令启动它时,它会显示这个错误:

applic.ports is invalid: Invalid port ":", should be [[remote_ip:]remote_port[-remote_port]:]port[/protocol]

我做错了什么?我尝试了互联网上的许多解决方案,但没有任何帮助。

【问题讨论】:

    标签: spring-boot docker docker-compose


    【解决方案1】:

    将其更改为:

    "${DEBUG_PORT}:${DEBUG_PORT}"
    

    还有这个:

    args:
            - DEBUG_PORT=${DEBUG_PORT}
            - DEBUG_FLAG=${DEBUG_FLAG}
    

    要工作,您首先需要将它们导出。

    export DEBUG_PORT=xxxx && export DEBUG_FLAG=xxxx && docker-compose up --build
    

    【讨论】:

    • 看起来可行。但它是这种情况的唯一解决方案吗?我的意思是如果我不想启用调试怎么办?即使我不需要这种模式,我也应该添加 export DEBUG_PORT。
    • 是的,我认为,因为 compose 将始终尝试评估 "${DEBUG_PORT}:${DEBUG_PORT}",如果未设置,则它只会看到 :
    【解决方案2】:

    似乎是在启动容器时变量扩展的错误。

       ports:
          - "8083:8083"
          - "${DEBUG_PORT}:${DEBUG_PORT}"
    

    在 compose 文件的根目录下创建 .env。

    DEBUG_PORT=80
    

    根据How to get port of docker-compose from env_file?问题需要在.env中定义DEBUG_PORT

    env_file optin 只会在 docker 中设置环境变量 容器本身。不在撰写期间使用的主机上 '构建'。

    要将您的端口定义为 env var,您应该使用 .env 文件作为 描述here

    在您的情况下,创建一个 .env 文件,其中包含::

    DEBUG_PORT=5000

    【讨论】:

    • 不起作用(我试图将 env 文件添加到我的 docker-compose 文件中,但它显示了同样的错误。
    • 你需要像 linpy 提到的那样放置双引号“"${DEBUG_PORT}:${DEBUG_PORT}"
    • 是的。我按照答案中的说明放置它:-“${DEBUG_PORT}:${DEBUG_PORT}”并将此参数添加到 local.env DEBUG_PORT=5005。我使用这个 env_file 将这个文件与 docker-compose 连接起来:-local.env,但它仍然不起作用
    • 你检查提供的链接了吗
    • 尝试从本地/目录启动 docker-compose up --build .env 必须在工作目录中作为 compose.yml
    猜你喜欢
    • 2019-12-30
    • 2019-06-12
    • 2020-11-07
    • 2018-08-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    相关资源
    最近更新 更多