【问题标题】:Passing arguments for Dockerfiles using Docker compose使用 Docker compose 为 Dockerfile 传递参数
【发布时间】:2016-06-27 23:44:23
【问题描述】:

我正在尝试在构建阶段使用参数化我的 dockerfile 并在 Docker-compose 中使用参数。例如,在 Docker compose 中,我定义了一个名为 bpp 的服务,如下所示:

bpp:
  build:
    context: .
    dockerfile: Dockerfile.bpp
    args:
      gp : 8080
  image: serv/bpp
  restart: always
  depends_on:
    - data
  links:
    - data

我正在尝试将名为 gp 的参数传递给 Dockerfile.bpp,我在启动 Python 应用程序时使用参数,公开端口等。 例如在 dockerfile.bpp 中尝试公开端口 gp 如下:

EXPOSE gp

但是,当通过命令 docker-compose build 构建 docker 文件时,我收到以下错误: 错误:服务“bpp”未能构建:无效的容器端口:gp

似乎参数 gp 在 dockerfile 中不可见。有什么建议吗?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    您需要将ARG gp 添加到您的Dockerfile。

    ...
    ARG gp
    
    EXPOSE $gp
    ...
    

    https://docs.docker.com/engine/reference/builder/#arg

    值得一提的是,当您通过 compose 运行它时,这不会暴露端口,您需要为此向 docker-compose.yml 添加 ports 指令。

    【讨论】:

      【解决方案2】:

      首先,the syntax is

      build:
        args:
          buildno: 1
          user: someuser
      
      build:
        args:
          - buildno=1
          - user=someuser
      

      所以试试gp: 8080,而不是gp : 8080

      其次,确保您使用的是version 2 of the docker-compose.yml format

      第三,试试

      EXPOSE $gp
      

      【讨论】:

      • 我做了你建议的修复,但出现以下错误:错误:服务 'bpp' 无法构建:EXPOSE 需要至少一个参数
      • @lipponen 你用 $gb 试过了吗?我想如果没有 $? 它也会失败
      • 是的,我在 dockerfile 中有 EXPOSE $gp
      • @lipponen 你的 docker-compose.yml 中有版本 2 吗?
      • @lipponen 你在bpp之前有services:吗?
      猜你喜欢
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      相关资源
      最近更新 更多