当前位置: 首页 > 面试题库 >

Docker上的Dockerfile传递环境组成构建

文英达
2023-03-14
问题内容

我写了一个Dockerfile使用两个参数的:

FROM jessie
MAINTAINER Zeinab Abbasimazar
#Build Arguments
ARG REP_USER
ARG REP_PASS
# Build
RUN echo 'REP_USER:'$REP_USER', REP_PASS:'$REP_PASS

我写了一个docker-compose.ymlfor build:

version: "2"
services:
  ui:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        REP_USER: $REP_USER
        REP_PASS: $REP_PASS

我不想直接在compose文件中定义这些参数,因此我尝试在docker compose构建期间发送它们:

REP_USER=myusername REP_PASS=mypassword docker-compose build

哪个没有用。我更改Dockerfile为将这些参数用作环境变量。所以我删除了几ARG行:

FROM jessie
MAINTAINER Zeinab Abbasimazar
# Build
RUN echo 'REP_USER:'$REP_USER', REP_PASS:'$REP_PASS

docker-compose.yml

version: "2"
  services:
    ui:
      build:
        context: .
        dockerfile: Dockerfile

跑了REP_USER=myusername REP_PASS=mypassword docker-compose build; 仍然没有结果。

我还尝试将这些信息保存到env文件中:

version: "2"
services:
  ui:
    build:
      context: .
      dockerfile: Dockerfile
    env_file:
      - myenv.env

但是,似乎env文件在构建时不会受到影响。他们只是参与运行时间。

编辑1:

Docker版本1.12.6不支持使用传递参数--build-arg

编辑2:

我尝试.env按照此处所述使用文件:

cat .env 
REP_USER=myusername
REP_PASS=mypassword

然后我打电话给docker-compose config哪个返回:

networks: {}
services:
  ui:
    build:
      args:
        REP_PASS: mypassword
        REP_USER: myusername
      context: /home/zeinab/Workspace/ZiZi-Docker/Test/test-exec-1
      dockerfile: Dockerfile
version: '2.0'
volumes: {}

这意味着这解决了我的问题。

编辑3:

我也尝试过的第三部分泊坞窗,撰写ARG文件在我的docker-compose.yml文件:

version: "2"
services:
  ui:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        - REP_USER
        - REP_PASS

并执行:

export REP_USER=myusername;export REP_PASS=mypassword;sudo docker-compose build --no-cache

仍然没有得到我想要的。


问题答案:

我终于找到了解决方案。我在问题中也提到了它。我首先尝试失败,然后发现我有一个错字命名.env文件。是.evn

我尝试.env按照此处所述使用文件:

cat .env 
REP_USER=myusername
REP_PASS=mypassword

然后我打电话给docker-compose config哪个返回:

networks: {}
services:
  ui:
    build:
      args:
        REP_PASS: mypassword
        REP_USER: myusername
      context: /home/zeinab/Workspace/ZiZi-Docker/Test/test-exec-1
      dockerfile: Dockerfile
version: '2.0'
volumes: {}


 类似资料:
  • 我需要在Dockerfile中传递环境变量,如下所示。我可以知道做这件事的有效方法吗。我尝试使用构建参数 但它没有用。 这是我的 Dockerfile 所以当我运行我的docker容器时,我相信我不想向它发送任何环境变量。 请指教。

  • 我正在尝试将服务器URL传递给在Docker容器中运行的React应用程序。它在应用程序中发送HTTP请求时使用,访问方式如下:server_url。这在主机上存储为en环境变量。 我尝试过直接在我的does文件中设置变量:< code > ENV server _ URL = $ { server _ URL } ,我认为这不起作用,因为< code>${server_url}是针对does文件

  • 在构建docker映像时,可以将环境变量作为文件传递给Dockerfile吗? 我按照这里的建议使用了,但由于我有多个参数,我更喜欢使用一个文件。 我也尝试使用方法,但我需要在构建时添加这些参数。 提前感谢。

  • 问题内容: docker-compose.yml: Dockerfile: 结果是: 我ing不休,为什么这不起作用。如果更改节点版本号,则该数字也会更改。 问题答案: 在compose文件上定义的参数在Dockerfile上可用,但仅在之前和之上可用。在参数不可用之后: 在a之前的声明位于构建阶段之外,因此不能在以后的任何指令中使用它。- 来自docker docs 为什么论点起作用? 。之后的

  • 问题内容: 如何将主机环境变量(例如用户名和主机名)传递给dockerfile? 例如,如果我的用户名是: 如何编写Docker文件以获得相同的输出? 问题答案: 我遇到了同样的问题。我的解决方案是在docker-compose.yml内部提供变量,因为yml支持使用环境变量。 我认为这对我来说是最有效的方式,因为我不喜欢在命令行中使用类似以下内容一遍又一遍地键入它 在容器中,声明将无效,将设置为

  • 我已经查看了我们可以在通过dockerfile构建docker映像的同时通过cmd行传递ENV变量吗?这向我展示了如何使用传递环境变量。在看到没有定义环境变量后,我查看了传递环境变量不适用于Docker,但这涉及通过传递环境变量。 这是我的: 和< code>docker build命令: 结果输出: 然而的输出是: 我错过了什么?