首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker容器中的Runit不传递环境变量

Docker容器中的Runit不传递环境变量
EN

Stack Overflow用户
提问于 2019-01-08 18:38:08
回答 2查看 692关注 0票数 1

我正在尝试在Docker中运行一个多进程应用程序,将runit用作init进程,但runit不会将环境变量传递给该应用程序:

在Dockerfile中:

代码语言:javascript
复制
CMD ["runit"]

服务文件/etc/service/app/run如下所示:

代码语言:javascript
复制
#!/bin/sh
exec 2>&1

echo "ENV_VAR=$ENV_VAR"
exec app

当我在设置了ENV_VAR的情况下运行docker容器时,runit不会将变量传递给应用程序。输出:

代码语言:javascript
复制
# docker run --name container -e ENV_VAR=loremipsum -d IMAGE_NAME
# docker logs container
- runit: $Id: 25da3b86f7bed4038b8a039d2f8e8c9bbcf0822b $: booting.
- runit: warning: unable to open /dev/console: file does not exist
- runit: enter stage: /etc/runit/1
/etc/runit/1: 6: /etc/runit/1: /etc/init.d/rcS: not found
/etc/runit/1: 7: /etc/runit/1: /etc/init.d/rmnologin: not found
/etc/runit/1: 12: /etc/runit/1: /etc/init.d/rc: not found
- runit: warning: child failed: /etc/runit/1
- runit: leave stage: /etc/runit/1
- runit: enter stage: /etc/runit/2
ENV_VAR=
...
* app failed because ENV_VAR was not set correctly *

如何让runit将环境变量传递给服务/应用程序?

EN

回答 2

Stack Overflow用户

发布于 2019-01-08 22:44:33

你可以试试这种方式。

代码语言:javascript
复制
ENV MY_ENV_VAR $MY_ENV_VAR

示例如下

代码语言:javascript
复制
ARG var_name
ENV env_var_name=$var_name

代码语言:javascript
复制
docker build --build-arg var_name=${VARIABLE_NAME} (...)
票数 1
EN

Stack Overflow用户

发布于 2019-08-21 02:47:00

当我在类似的设置上工作时,我遇到了你的问题,发现它对我来说是有效的,所以你可以在下面的例子中看到,你可以直接调用环境变量。

下面是我测试过的示例:

脚本1

代码语言:javascript
复制
# This is the run script that will be used for this dummy service
$ cat stackoverflow-question/run 
#!/bin/sh
exec 2>&1

exec echo "$Q_NUM"

脚本2

代码语言:javascript
复制
# This is the run script that will be used for this dummy service
$ cat stackoverflow-question/run 
#!/bin/sh
exec 2>&1

NUMBER=$Q_NUM

exec echo "$NUMBER"

我已经使用了一个名为dockage/alpine-runit的映像进行测试,所以您可以随意使用您自己的runit安装。

注意:我已经测试了此图像附带的默认CMD和用于重现您的示例的runit命令,正如您可以看到的那样,这两个命令都能正常工作,它会打印出我们想要的问题编号。

代码语言:javascript
复制
$ docker run -it --rm -v "$PWD:/service/" \
  -e Q_NUM=54089994 dockage/alpine-runit:latest runit
- runit: $Id: 25da3b86f7bed4038b8a039d2f8e8c9bbcf0822b $: booting.
- runit: enter stage: /etc/runit/1
- runit: leave stage: /etc/runit/1
- runit: enter stage: /etc/runit/2
54089994
54089994
54089994
54089994
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54089994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档