【发布时间】:2018-09-23 12:04:45
【问题描述】:
我正在尝试从条件 entrypoint.sh 脚本中获取 .env 文件,其中一部分看起来像这样:
if [ -f "some-env-file.env" ]; then
source some-env-file.env
在.env文件中找到一个环境变量的简单回显,就在上述源命令之后,输出正确的值,并且入口点脚本中提供的操作成功执行。
但是,当我在实例化容器内执行 docker exec -it 时,env 文件看起来好像没有来源。只有当我从那里再次采购时,我才能得到理想的结果。 (更具体地说,env文件用于指向python的特定运行时环境。所以进入容器后,只有当我再次source env文件时才能正确调用python。
我做错了什么?
作为参考,这些是我的 Dockerfile 的最后几行(没什么特别的):
COPY ./entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]
容器实例化是使用docker-compose yaml 完成的。
提前致谢,如果之前有人问过这个问题,我们深表歉意。
【问题讨论】:
-
entrypoint.sh的shebang是什么? -
这里是:#!/bin/bash
-
如果您将
set -x添加到entrypoint.sh的顶部(但在shebang 之后)并尝试,它看起来是否至少尝试 来获取文件? -
也许我不够清楚。在入口点脚本中,var 的来源是正确的,并且容器的功能是正确的。不正确的是,当我在容器内执行时,env vars 就好像它们没有来源一样。例如,在调用 java 时出现“找不到命令”,同时它来自入口点脚本。
-
啊,好的。但是,为什么会起作用呢?如果
entrypoint.sh获取文件并对环境进行更改,则只有 其 环境会受到影响(可能还有子进程的环境)。
标签: shell docker docker-compose dockerfile docker-entrypoint