使用 docker-compose 中的命令导出后 bash 中没有环境变量

No env variables in bash after exported with command in docker-compose

我有一个 serverless.yml 文件,它定义了环境变量。为了在 docker 容器中将它们用于我的本地阶段,我使用 serverless dotenv plugin 将它们导出到 .env 文件。我在我的 docker-compose.yml 中执行此操作,我还从该文件中导出变量。它可以工作,因为我的 django 设置可以访问它们。

command: >
  bash -c "sls dotenv -s local
  && export $$(grep -v '^#' .serverless/.env | xargs -d '\n')
  && python manage.py makemigrations ingredients"

但是,如果我bash进入容器或者运行一个命令,环境变量就不再可用了:

docker-compose exec name python manage.py createsuperuser

我错过了什么?

执行时环境变量不可用,因为它们不是同一执行的一部分。您正在将流程分支而不是附加。我要做的是创建一个文件 profile,其中包含您需要的环境变量。将它作为 .profile 复制到根目录(或您正在执行的任何用户)主目录,您应该可以开始了。

根据 George Appleton 的回答,我已将我已经在使用的导出命令添加到 .bashrc,并使用以下命令 docker-compose.yml:

echo 'export $$(grep -v \"^#\" .serverless/.env | xargs -d \"\n\")' > /root/.bashrc

如果我现在执行 bash 所有环境变量都可用。