无法执行命令以在 docker 容器中设置环境变量
Can't execute command to set environment variables in docker container
我看到以下链接可以在 docker-compose
文件中执行多个命令:
- Docker-Compose + Command
- docker-compose run multiple commands for a service
它告诉我们如何在 docker-compose 文件(也在 docker 容器中)中执行多个命令。
为了 运行 sburn/apache-atlas 图像正确,我必须设置一些存在于 /opt/apache-atlas-2.1.0/conf/atlas-env.sh
目录中的环境变量。
我尝试了以下 docker-compose.yml 文件:
version: "3.3"
services:
atlas:
image: sburn/apache-atlas
container_name: atlas
ports:
- "21000:21000"
volumes:
- "./bash_script:/app"
command: bash -c "
source ./opt/apache-atlas-2.1.0/conf/atlas-env.sh
&& chmod 777 /app/import-hive.sh
&& /opt/apache-atlas-2.1.0/bin/atlas_start.py
"
不幸的是,第一个命令(我的意思是 source ./opt/apache-atlas-2.1.0/conf/atlas-env.sh
)不起作用。它没有任何错误,但未设置 JAVA_HOME 等环境变量。
您如何检查未设置变量?
- 运行
Docker exec -it atlas bash
在终端中。
- 运行
set
在终端中。它显示了所有环境变量。
- 检查是否设置了环境变量
要设置环境变量,您必须这样设置:
environment:
- JAVA_HOME=/usr/bin/java
- OTHER_VARIABLE=example
或者您可以通过以下方式在 Dockerfile 上设置变量:
ENV JAVA_HOME="Your variable"
ENV OTHER_VARIABLE="example"
如果你想在容器启动时执行 ./opt/apache-atlas-2.1.0/conf/atlas-env.sh 脚本,因为这个脚本有你需要的所有环境,你可以使用 CMD 将它包含在入口点或 Dockerfile 中执行
示例:
FROM: source_image
RUN source ./opt/apache-atlas-2.1.0/conf/atlas-env.sh
ENTRYPOINT []
要从您的 docker-compose 执行命令,试试这个:
command: sh -c "source ./opt/apache-atlas-2.1.0/conf/atlas-env.sh"
此致
来源:docker-compose, run a script after container has started?
你的问题涉及很多东西,如果你能缩小范围,人们可以提供更好的帮助。以下是我的调试建议:
bash -exc "
echo home1=$JAVA_HOME
source ./opt/apache-atlas-2.1.0/conf/atlas-env.sh
echo home2=$JAVA_HOME
chmod 777 /app/import-hive.sh
echo home3=$JAVA_HOME
/opt/apache-atlas-2.1.0/bin/atlas_start.py
"
如果从未设置 JAVA_HOME
,则 .sh
文件有问题,您可以修复该文件或使用
手动设置它
export JAVA_ENV=/aaa/bbb/ccc
或者在你的 compose yaml 文件中定义它。
此外,您检查环境变量的方式是错误的,运行宁 Docker exec -it atlas bash
不会 运行 与 [=15= 在同一个 bash 中]
我看到以下链接可以在 docker-compose
文件中执行多个命令:
- Docker-Compose + Command
- docker-compose run multiple commands for a service
它告诉我们如何在 docker-compose 文件(也在 docker 容器中)中执行多个命令。
为了 运行 sburn/apache-atlas 图像正确,我必须设置一些存在于 /opt/apache-atlas-2.1.0/conf/atlas-env.sh
目录中的环境变量。
我尝试了以下 docker-compose.yml 文件:
version: "3.3"
services:
atlas:
image: sburn/apache-atlas
container_name: atlas
ports:
- "21000:21000"
volumes:
- "./bash_script:/app"
command: bash -c "
source ./opt/apache-atlas-2.1.0/conf/atlas-env.sh
&& chmod 777 /app/import-hive.sh
&& /opt/apache-atlas-2.1.0/bin/atlas_start.py
"
不幸的是,第一个命令(我的意思是 source ./opt/apache-atlas-2.1.0/conf/atlas-env.sh
)不起作用。它没有任何错误,但未设置 JAVA_HOME 等环境变量。
您如何检查未设置变量?
- 运行
Docker exec -it atlas bash
在终端中。 - 运行
set
在终端中。它显示了所有环境变量。 - 检查是否设置了环境变量
要设置环境变量,您必须这样设置:
environment:
- JAVA_HOME=/usr/bin/java
- OTHER_VARIABLE=example
或者您可以通过以下方式在 Dockerfile 上设置变量:
ENV JAVA_HOME="Your variable"
ENV OTHER_VARIABLE="example"
如果你想在容器启动时执行 ./opt/apache-atlas-2.1.0/conf/atlas-env.sh 脚本,因为这个脚本有你需要的所有环境,你可以使用 CMD 将它包含在入口点或 Dockerfile 中执行
示例:
FROM: source_image
RUN source ./opt/apache-atlas-2.1.0/conf/atlas-env.sh
ENTRYPOINT []
要从您的 docker-compose 执行命令,试试这个:
command: sh -c "source ./opt/apache-atlas-2.1.0/conf/atlas-env.sh"
此致
来源:docker-compose, run a script after container has started?
你的问题涉及很多东西,如果你能缩小范围,人们可以提供更好的帮助。以下是我的调试建议:
bash -exc "
echo home1=$JAVA_HOME
source ./opt/apache-atlas-2.1.0/conf/atlas-env.sh
echo home2=$JAVA_HOME
chmod 777 /app/import-hive.sh
echo home3=$JAVA_HOME
/opt/apache-atlas-2.1.0/bin/atlas_start.py
"
如果从未设置 JAVA_HOME
,则 .sh
文件有问题,您可以修复该文件或使用
export JAVA_ENV=/aaa/bbb/ccc
或者在你的 compose yaml 文件中定义它。
此外,您检查环境变量的方式是错误的,运行宁 Docker exec -it atlas bash
不会 运行 与 [=15= 在同一个 bash 中]