【问题标题】:Invalid env setting in dockerfiledockerfile 中的环境设置无效
【发布时间】:2021-04-30 02:42:31
【问题描述】:

docker中的env设置在ENTRYPOINT中无法生效,但是进入容器后可以正常使用

下面可以看到MYSQL_DB的环境变量设置

备注: 因为想通过脚本动态设置ENV,所以在写Dockerfile的时候不知道有哪些环境变量,所以没办法在dockerfile中使用ENV来设置环境变量。我只能用RUN命令动态引入环境变量。

Dockerfile:

FROM alpine:3.8
ENV ENV="/etc/profile" 
RUN echo "export MYSQL_DB=127.0.0.1" >> "$ENV"
RUN echo "env && echo '************' && tail -f /etc/profile">/tmp/test.sh

ENTRYPOINT  ["sh","tmp/test.sh"]

运行 Dockerfile

docker build -f Dockerfile -t test . && docker run --name test -p 3333:3000 -itd test && docker logs -f test

码头工人日志

HOSTNAME=dcb1372343c0
SHLVL=1
HOME=/root
ENV=/etc/profile
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
************
export PAGER=less
export PS1='\h:\w\$ '
umask 022

for script in /etc/profile.d/*.sh ; do
        if [ -r $script ] ; then
                . $script
        fi
done
export MYSQL_DB=127.0.0.1

执行 docker 打印环境

➜  nodejs_dist git:(master) ✗ docker exec -it test /bin/sh                                                                                                    
dcb1372343c0:/# env
HOSTNAME=dcb1372343c0
SHLVL=1
HOME=/root
PAGER=less
PS1=\h:\w\$ 
ENV=/etc/profile
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
CHARSET=UTF-8
MYSQL_DB=127.0.0.1

【问题讨论】:

  • 您能多谈谈您的大型应用程序吗?您控制进入 Dockerfile 的所有内容,因此您应该知道(或可能)设置了哪些环境变量。您可能应该优化主容器进程的设置(因此在 ENTRYPOINT 包装脚本中进行设置是一个不错的选择),而不必担心 docker exec 调试 shell。

标签: linux docker kubernetes dockerfile alpine


【解决方案1】:

/etc/profile 仅在login shell 内调用,而sh 默认在non login shell 模式下工作。

一种解决方案可能是使用逻辑外壳将其更改为强制:

ENTRYPOINT  ["sh","-l","tmp/test.sh"]

执行结果:

$ docker run abc:1
HOSTNAME=11a873681051
SHLVL=1
HOME=/root
PAGER=less
PS1=\h:\w\$
ENV=/etc/profile
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
CHARSET=UTF-8
MYSQL_DB=127.0.0.1
************
export PAGER=less
export PS1='\h:\w\$ '
umask 022

for script in /etc/profile.d/*.sh ; do
        if [ -r $script ] ; then
                . $script
        fi
done
export MYSQL_DB=127.0.0.1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    相关资源
    最近更新 更多