当前位置: 首页 > 知识库问答 >
问题:

我们可以通过cmd行传递ENV变量,同时通过dockerfile构建docker映像吗?

容学林
2023-03-14

我正在进行一项任务,该任务涉及使用Dockerfile以centOs为基础构建docker图像。dockerfile中的一个步骤需要设置http\U proxy和https\U proxy ENV变量,以便在代理之后工作。

由于此Dockerfile将由具有不同代理的多个团队使用,因此我希望避免为每个团队编辑Dockerfile。相反,我正在寻找一种解决方案,允许我在构建时传递ENV变量,例如。,

sudo docker build-ehttp_proxy=Somvalue。

我不确定是否已经有这样的选择。我错过什么了吗?

共有3个答案

鲁洋
2023-03-14

我面临着同样的情况。

根据Sin30的回答,漂亮的解决方案是使用shell,

CMD ["sh", "-c", "cd /usr/local/etc/php && ln -sf php.ini-$APP_ENV php.ini"]
屠德宇
2023-03-14

所以我不得不通过反复试验来找出这个问题,因为许多人解释说,你可以传递ARG-

下面的例子应该清楚地解释这一点。我最初的主要问题是我的所有ARGS都是在From之前定义的,这导致所有ENV始终未定义。

# ARGS PRIOR TO FROM TAG ARE AVAIL ONLY TO FROM for dynamic a FROM tag
ARG NODE_VERSION
FROM node:${NODE_VERSION}-alpine

# ARGS POST FROM can bond/link args to env to make the containers environment dynamic
ARG NPM_AUTH_TOKEN
ARG EMAIL
ARG NPM_REPO

ENV NPM_AUTH_TOKEN ${NPM_AUTH_TOKEN}
ENV EMAIL ${EMAIL}
ENV NPM_REPO ${NPM_REPO}

# for good measure, what do we really have
RUN echo NPM_AUTH_TOKEN: $NPM_AUTH_TOKEN && \
  echo EMAIL: $EMAIL && \
  echo NPM_REPO: $NPM_REPO && \
  echo $HI_5
# remember to change HI_5 every build to break `docker build`'s cache if you want to debug the stdout

..... # rest of whatever you want RUN, CMD, ENTRYPOINT etc..
韦欣德
2023-03-14

可以使用类似于环境变量的构建参数(在Docker 1.9中)构建容器。

方法如下:

FROM php:7.0-fpm
ARG APP_ENV=local
ENV APP_ENV ${APP_ENV}
RUN cd /usr/local/etc/php && ln -sf php.ini-${APP_ENV} php.ini

然后构建一个生产容器:

docker build--build-argAPP_ENV=prod。

针对您的特定问题:

FROM debian
ENV http_proxy ${http_proxy}

然后运行:

docker build--build arg http\u proxy=10.11.24.31

请注意,如果您使用docker-compose构建容器,您可以在docker-compose.yml文件中指定这些构建参数,但不能在命令行中指定。但是,您可以在docker-compose.yml文件中使用变量替换,该文件使用环境变量。

 类似资料:
  • 本文向大家介绍通过Dockerfile构建Docker镜像的方法步骤,包括了通过Dockerfile构建Docker镜像的方法步骤的使用技巧和注意事项,需要的朋友参考一下 Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. Dockerfile支持Shell类的行尾添加"\"的命令换行方式,以及

  • 问题内容: 我目前正在express.js应用程序中处理handlebars.js。为了使事情保持模块化,我将所有模板都分成了部分。 我的问题 :我找不到通过部分调用传递变量的方法。假设我有一个部分看起来像这样: 假设我用“ myPartial”这个名字注册了这个部分。然后,在另一个模板中,我可以说: 效果很好,部分将按预期渲染,我是一个快乐的开发人员。但是,我现在需要的是一种通过此调用传递不同变

  • 问题内容: 我有一个链接: 触发ajax调用 但是在控制台中,我看到以下内容: 处理了ajax文件,但是POST数据为空,并且没有执行成功操作,因此将其用零发布,并且类未更改 我凝视着……有什么明显的东西吗? 问题答案: 不会自动传递给AJAX回调函数。您可以使用参数告诉jQuery通过它:

  • 问题内容: 构建Docker映像可以在桌面上正常工作。安装Node.js NPM依赖项照常工作。但是,当使用在公司代理后面托管的持续集成服务器(例如Jenkins)时,构建Docker映像将失败。 Node.js NPM依赖关系 在构建Node.js pacakges时,如果在克隆GIT依赖项时无法连接到GIT ,则命令 npm install 失败。 Java Maven,Ruby,具有依赖关系

  • 目前,我发现谷歌云构建发生在构建docker图像的时候(不像我想象的那样,它会构建我的图像,然后执行我的图像来完成所有的构建)。那是在这篇文章里 谷歌云构建的快速启动 我有一个Dockerfile现在很简单 我有一个单一的下载和提取下载任何工件(zip文件)从最后的单构建运行构建(只有修改的服务器被构建或依赖于上一个CI构建的变化的服务器被构建,就像下游库可能被更改)。第一行只是列出了我需要在一个

  • 问题内容: 我的代码: 为什么不引用元素? Python:除非明确复制,否则所有内容都将作为参考传递[这不是True吗?] 请说明.. python如何确定 引用和复制 ? 更新: 怎么做 ? locs必须包含最终处理后的响应! 我不想使用,没有它可能吗? 问题答案: Python中的所有内容都是通过值传递和分配的,与Java中的所有值都传递和分配的方式相同。Python中的每个值都是对对象的引用