因为我放在容器中的应用程序的bin名称可以更改(docker构建是更大构建的一部分,我很容易将正确的名称从一个构建传递到另一个构建)我想做这样的事情:
< code >入口点["$PATH_TO_BIN"]
但由于没有外壳来评估,这通常会失败。理论上我可以去
入口点 $PATH_到_BIN
但在这种情况下,我在执行run
时无法传递任何参数。
有没有可能在构建期间使用exec form并计算args或env变量(这样在运行时就不需要shell了)?)
这很有可能。问题是您试图直接执行命令。相反,您需要做的是,创建一个entrypoint.sh
并让它执行。该脚本可以根据环境变量确定它需要做什么。
考虑下面的Dockerfile文件
FROM centos:7.2.1511
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["this","is", "tarun"]
entrypoint.sh
内容如下
#!/usr/bin/env sh
_load() {
CMD=""
if [ ! -z "$ENTRYPOINT" ]; then
CMD=$ENTRYPOINT
fi
if [ "$#" -gt 0 ]; then
CMD="$CMD $@"
elif [ ! -z $COMMAND ]; then
CMD="$CMD $COMMAND"
fi
echo "Executing - $CMD"
exec $CMD
}
_load $@
该脚本除了检查是否传递了环境变量< code>$ENTRYPOINT或< code>$COMMAND或者两者都传递了,或者来自docker run的命令传递了之外,什么也不做。它根据以下优先级顺序运行命令
现在测试一下
$ docker run -e ENTRYPOINT=/bin/echo test my name "is XYZ"
Executing - /bin/echo my name is XYZ
my name is XYZ
剧本可能不是100%完美,但我只是为了证明这个想法
如果您需要一个简单的entrypoint.sh
,那么您甚至可以将其替换为以下内容
exec $ENTRYPOINT $@
这也行得通。
如果您使用的是最新版本的 Docker 引擎,则可以将其添加到 Dockerfile 中:
ARG PATH_TO_BIN
然后执行以下操作:
docker build --build-arg PATH_TO_BIN=/usr/bin/
在文档中查看更多信息
我正在尝试将服务器URL传递给在Docker容器中运行的React应用程序。它在应用程序中发送HTTP请求时使用,访问方式如下:server_url。这在主机上存储为en环境变量。 我尝试过直接在我的does文件中设置变量:< code > ENV server _ URL = $ { server _ URL } ,我认为这不起作用,因为< code>${server_url}是针对does文件
在构建docker映像时,可以将环境变量作为文件传递给Dockerfile吗? 我按照这里的建议使用了,但由于我有多个参数,我更喜欢使用一个文件。 我也尝试使用方法,但我需要在构建时添加这些参数。 提前感谢。
我需要在Dockerfile中传递环境变量,如下所示。我可以知道做这件事的有效方法吗。我尝试使用构建参数 但它没有用。 这是我的 Dockerfile 所以当我运行我的docker容器时,我相信我不想向它发送任何环境变量。 请指教。
问题内容: 我有一个代表路径的字符串。由于此应用程序在Windows,OSX和Linux上使用,因此我们定义了环境变量以正确映射来自不同文件系统的卷。结果是: 我想做的是评估字符串中的环境变量,以便将它们替换为各自的卷名。我是否缺少特定的命令,还是必须采取并手动替换字符串? 问题答案: 使用os.path.expandvars扩展字符串中的环境变量,例如:
问题内容: 我的特定用例是,我想组织一些有关容器在其上运行的EC2实例的数据,并使我可用作环境变量。构建容器时,我想这样做。 我希望能够在Dockerfile中执行类似的操作,但毫不奇怪,这行不通(您只得到了string )。 我应该提及的是,我知道将要执行此操作,但是我特别希望将其内置到容器中。 我是否缺少明显的东西?这有可能吗? 问题答案: Docker v1.9或更高版本 如果您使用的是Do
问题内容: 我正在为红宝石应用程序构建一个容器。我的应用程序的配置包含在环境变量中(通过dotenv加载到应用程序内部)。 这些配置变量之一是应用程序的公共ip,它在内部用于建立链接。我需要添加一个dnsmasq条目,将该ip指向容器内部的127.0.0.1,以便它可以获取应用程序的链接,就好像未对其进行容器化一样。 因此,我试图在我的Dockerfile中设置一个将环境变量传递给容器的。 我尝试