【问题标题】:How to get environment variables from a non-executable script in a docker container?如何从 docker 容器中的不可执行脚本中获取环境变量?
【发布时间】:2022-01-19 23:35:18
【问题描述】:

我有一个 Dockerfile:

### everything, that was commented out with '#' was tried to no avail
FROM ubuntu
#RUN echo "!#/bin/sh" > do.sh
RUN echo "export A=A" >> do.sh

### please run script do.sh
#SHELL ["/bin/bash" ,"-c", "source /do.sh"]
#RUN source /do.sh
#ENTRYPOINT /do.sh

我使用 Makefile 构建它:

all: build run
build:
    echo build|figlet
    docker build -t test .
run:
    echo run|figlet
    docker run -it test

当我进入交互式终端时,我只想从脚本do.sh中获得环境变量。

这是从另一个上下文重现问题。这就是我不想使脚本可执行的原因。 我原来的上下文是:我想从本教程http://wiki.ros.org/ROS/Tutorials/CreatingPackage 调用catkin_ws/devel . ~/catkin_ws/devel/setup.bash 中的一个脚本。

【问题讨论】:

  • 脚本没有环境。一个进程有一个环境。当然,询问运行某个脚本的进程在其执行的特定点所具有的环境是有意义的。为此,您可以在脚本中添加printenv >env.txtenv.txt 将包含在执行 printenv 命令时生效的环境定义。

标签: linux bash docker


【解决方案1】:

使用 docker run 尝试“--env-file=”选项

RUN echo "export A=A" >> ~/.bash_profile

-l bash 的选项,使 bash 的行为就像它已被作为登录 shell 调用一样

all: build run
build:
    echo build|figlet
    docker build -t test .
run:
    echo run|figlet
    docker run -it test /bin/bash -l

【讨论】:

  • 为此,do.sh 需要存在于容器之外。当它在 RUN 语句中创建时将不起作用。
  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2016-03-07
  • 2019-01-09
  • 2018-06-17
  • 2016-12-28
  • 1970-01-01
  • 2020-07-24
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多