1

我已经看到以下链接在docker-compose文件中执行多个命令:

它告诉我们如何在 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 等环境变量。

您如何检查未设置变量?

  1. Docker exec -it atlas bash在终端中运行。
  2. set在终端中运行。它显示了所有环境变量。
  3. 检查是否设置了环境变量。
4

2 回答 2

2

你的问题涉及很多东西,如果你能缩小范围,人们可以提供更好的帮助。以下是我的调试建议:

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 文件中定义它。


此外,您检查 env vars 的方式是错误的,运行Docker exec -it atlas bash 不会在相同的 bash 中运行bash -c "source ./opt/apache-a..."

于 2021-03-06T13:59:57.540 回答
0

要设置环境变量,您必须设置:

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 exec 将其包含在入口点或 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,容器启动后运行脚本?

于 2021-03-06T10:47:02.650 回答