Tag: 环境variables

我们可以通过cmd行传递ENVvariables,同时通过dockerfile构build一个docker镜像吗?

我正在处理一个任务,涉及使用Dockerfile构build以centOs为基础的docker映像 。 dockerfile中的一个步骤需要设置http_proxy和https_proxy ENVvariables,以便在代理之后工作。 由于这个Dockerfile将被具有不同代理的多个团队使用,我想避免为每个团队编辑Dockerfile。 相反,我正在寻找一个解决scheme,允许我在构build时传递ENVvariables,例如, sudo docker build -e http_proxy = somevalue。 我不确定是否已经有一个选项可以提供这个function。 我错过了什么吗?

将variables从容器开始传递到文件

我在Dockerfile中有以下几行,我希望在应用程序启动之前将configuration文件中的值设置为默认值,并在启动容器时使用-e选项提供可选的设置。 我正在尝试使用Docker的ENV突击队 ENV CONFIG_VALUE default_value RUN sed -i 's/CONFIG_VALUE/'"$CONFIG_VALUE"'/g' CONFIG_FILE CMD command_to_start_app 我在CONFIG_FILE文件中显式地使用了stringCONFIG_VALUE,并且Dockerfile的默认值被正确replace。 但是,当我运行带有-e CONFIG_VALUE=100的容器时,不执行replace,保留在Dockerfile中设置的默认值。 当我做 docker exec -i -t container_name bash 并在容器内echo $CONFIG_VALUE环境variables确实包含所需的值100。

在docker-compose.yml文件中获取或设置envvariables

我有一个docker-compose.yml文件,在那里我定义: extra_hosts: – "localhost:${MY_MACHINE_IP}" 如果我之前将MY_MACHINE_IP定义为环境variables,它将起作用。 我想实现的是执行如下操作: extra_hosts: – "localhost:<get MY_MACHINE_IP from env if it exists, if not set MY_MACHINE_IP env variable with value <docker-machine-ip>>" 换句话说:我想在extra_hosts部分定义它,如果MY_MACHINE_IP已经被指定,那么得到它,如果没有 – 设置这个env。 variables与值=我的docker机器ip。 可能吗?

在Docker中相当于env-file的Kubernetes

背景: 目前我们正在使用Docker和Docker Compose来处理我们的服务。 我们将不同环境的configuration外化为定义由应用程序读取的环境variables的文件。 例如prod.env文件: ENV_VAR_ONE=Something Prod ENV_VAR_TWO=Something else Prod 和一个test.env文件: ENV_VAR_ONE=Something Test ENV_VAR_TWO=Something else Test 因此,我们可以简单地在启动容器时使用prod.env或test.env文件: docker run –env-file prod.env <image> 然后,我们的应用程序将根据prod.env定义的环境variables来select其configuration。 问题: 有没有办法从Kubernetes中的文件提供环境variables(例如定义一个pod时),而不是像这样硬编码它们: apiVersion:v1 类:Pod 元数据: 标签: 上下文:docker-k8s-lab 名称:mysql-pod 名称:mysql-pod 规格: 容器: – ENV: – 名称:MYSQL_USER 值:mysql – 名称:MYSQL_PASSWORD 值:mysql – 名称:MYSQL_DATABASE 值:样本 – 名称:MYSQL_ROOT_PASSWORD 价值:supersecret image:“mysql:latest” 名字:mysql 端口: – containerPort:3306 如果这是不可能的,那么build议的方法是什么?

Dockerfile中带有双星号的环境variables

我已经注意到,在一些Dockerfile中,环境variables是使用特定expression式来指定的,这些expression式执行某种variablesreplace,比如: ENV PASSWORD **Random** ENV NAME **False** 我无法在Docker官方文档中find对这些expression式的任何引用。 在哪里可以find可用于Dockerfile的可能expression式的列表,它们的含义是什么?

ENV 。编码返回#<Encoding:ASCII-8BIT>在生产时被分配一个Unicodestring

我在我的Rails应用程序中使用ENV [“VARIABLE”]设置为一个Unicodestring。 在生产(这是一个docker容器),这个ENV [“VARIABLE”]用Encoding:ASCII-8BIT (虽然ENV [“PWD”],例如编码为Encoding:UTF-8 )。 在development ,每个variables都使用Encoding:UTF-8进行Encoding:UTF-8 。 ASCII-8BIT的编码阻止我在视图中显示variables。 原因是什么? 我该如何解决?

从Docker容器获取环境variables

从Docker容器中获取未在Dockerfile中声明的环境variables的最简单方法是什么 ? 例如,通过一些docker exec container /bin/bash会话设置的环境variables? 我可以做docker exec container env | grep ENV_VAR docker exec container env | grep ENV_VAR ,但我更喜欢的东西,只是返回值。 我已经尝试使用docker exec container echo "$ENV_VAR" ,但替代似乎发生在容器外,所以我没有从容器中获得env var,而是从我自己的计算机中获得env var。 谢谢。

如何更改Docker ENV var?

在构buildDockerfile ,我经常允许在构build期间configuration参数,以便configuration容易构build的稍微不同的容器。 为了达到这个目的,我使用ENVvariables的默认值和用户可定义的ARG 。 示例Dockerfile快速testing: FROM busybox ARG FLAGS ENV FLAGS ${FLAGS:-} RUN echo "${FLAGS}" 这可以这样使用: docker build –build-arg FLAGS="foo –remove-me" -t <imagename>:<tag> . 现在我发现自己处于这种情况,我希望从允许运行的命令(由于一年多以来没有修复的错误)中主动删除特定的标志(在上面的示例中为–remove-me )。 虽然我知道如何去除其他情况下的国旗: LC_ALL=C sed -e 's/ –remove-me//' 我面临的问题是,我不知道如何pipe道和删除国旗。 我知道我可以在使用RUN这样做,但是我必须重复使用每个RUN语句的sed用法,因此不能使其重复。 编辑:在阅读关于这个AskUbuntu的答案的 shellvariablesreplace之后,我试了一下: ENV FLAGS ${FLAGS//–fully-static/} 但是,我遇到了以下错误: Missing ':' in substitution: "${FLAGS:-}" | "${FLAGS//–fully-static/}" 首先我发现Docker只支持有限的bash variablesreplace方法 。 最后,我可以在Docker GitHub Repo中findshell_parser.go文件,清楚地知道:必须在那里,在第一步中主动杀死这条path。

PHP-docker容器中的环境variables

我想在我的泊坞窗容器中显示一个env var。 PHP脚本如下所示: <html> <head> <title>Show Use of environment variables</title> </head> <body> <?php print "env is: ".$_ENV["USER"]."\n"; ?> </body> </html> 我使用OpenShift来启动容器。 PHP – 容器显示: env is: 现在我更改我的容器的dcconfiguration: oc env dc/envar USER=Pieter deploymentconfig "envar" updated 当我访问容器。 USER的env var是Pieter docker exec -it 44a0f446ae36 bash bash-4.2$ echo $USER Pieter 但我的脚本仍然显示:“ env is: ”它不填写variables。

在Docker容器中永久更新PATH环境variables

我尝试在文件~/.profile和/etc/profile添加PATH ,如下所示。 PATH = $PATH:/required/path 但是,它不起作用。 然后我尝试添加行显示,也没有工作。 export PATH 即使在重新启动容器和主机后,它也不起作用。