在Bash脚本中使用Dockerfile中的环境变量

3
我有一个非常简单的Redis bash脚本,用于在docker容器中启动我的应用程序时将一些默认值加载到Redis中。
我希望能够在bash脚本中获取传递给Dockerfile的ENV变量,在每次运行容器并检查日志时,它都会显示找不到设置的环境变量。
我的bash脚本只是:
#!/usr/bin/env bash
redis-server --daemonize yes && sleep 1

if [ "$ENVIRONMENT_VAR" = "found" ]; then
    echo "found environment var"
fi

我的 Dockerfile 片段,我在其中尝试设置值的默认值。
ENV ENVIRONMENT_VAR notfound

CMD ["sh", "redis.sh"]

而我的Docker-Compose文件中要传递的是

environment:
  - ENVIRONMENT_VAR=found

我在bash脚本中使用ENV值时,需要做一些特殊的事情吗?


不应该有。如果你运行 echo $ENVIRONMENT_VAR,它的值是什么? - David Maze
1个回答

3

我认为你所做的看起来完全没问题。如果你错过了什么,我已经实现了你想要完成的内容。 首先让我们从Dockerfile开始。

From redis:alpine
WORKDIR /usr/app
ENV ENVIRONMENT_VAR notfound
COPY . .
CMD sh ./start.sh

我在这里使用一个Redis镜像开始工作,声明环境变量,将脚本复制到容器中并启动。

其次是docker-compose,它也应该在某种程度上类似于您的实现。

version: '3.2'

services:
  redis:
    container_name: 'redis-test'
    build: .
    environment:
        - ENVIRONMENT_VAR=found
    restart: always

如果你使用docker-compose up命令查看输出,你会发现你想要打印的环境变量

redis-test | 7:C 21 Apr 2020 10:30:14.247 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis-test | 7:C 21 Apr 2020 10:30:14.247 # Redis version=5.0.9, bits=64, commit=00000000, modified=0, pid=7, just started
redis-test | 7:C 21 Apr 2020 10:30:14.247 # Configuration loaded
redis-test | found environment var

如 @David Maze 所述,您也可以通过在容器内部执行 echo $ ENVIRONMENT_VAR 来调试此问题。


你说得对,它正在被拉取,.sh脚本没有更新,所以我无法打印变量。感谢您的帮助。 - N P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接