docker - 使用 docker-compose.yml 未在 docker 容器中设置环境变量

标签 docker environment-variables

我有一个如下所示的 .env 文件:

# DEV
SALES_DB_HOST=xxx

然后我有一个 docker-compose.yml 文件,如下所示:

version: "3.1"
services:
  web:
    image: xxx
    build: .
    env_file: .env

但是,在像 process.env.SALES_DB_HOST 这样的 nodejs 中访问环境变量的值时,它会打印 undefined

docker-compose config 的输出是:

services:
  web:
    build:
      context: xxxxxxxx
    environment:
      SALES_DB_HOST: xxx
    image: xxxxx
version: '3.1'

所以,看起来 docker-compose.yml 的格式是正确的。但是为什么 process.env 没有正确获取这个值?

编辑:

我使用以下命令构建 docker 镜像:docker build -t my_image .

最佳答案

您可以更改 yml 文件中容器配置的命令吗? 您应该尝试测试您的环境以了解 - 问题出在哪里。在 docker 中或在您的代码中。

尝试这样的事情:

maxantonov : ~/passbolt  .$ cat dc.yml
version: '3.4'
services:
  db:
    image: alpine:latest
    container_name: db
    hostname: db
    env_file:
      - env/mysql.env
    command: ["printenv"]

maxantonov : ~/passbolt  .$ docker-compose -f dc.yml up
Starting db ... done
Attaching to db
db    | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
db    | HOSTNAME=db
db    | MYSQL_ROOT_PASSWORD=test
db    | MYSQL_DATABASE=passbolt
db    | MYSQL_USER=passbolt
db    | MYSQL_PASSWORD=P4ssb0lt
db    | HOME=/root
db exited with code 0

关于docker - 使用 docker-compose.yml 未在 docker 容器中设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50757262/

相关文章:

docker - 如何在Docker环境中访问Kafka Connector(融合日志连接)

java - 外部化 Grails 应用程序的运行配置

bash - 如何更改 Git 命令行界面的语言?

python - 在 Python 中为 os.path.expandpath 使用自定义环境变量

windows - Flutter - 运行命令 "flutter _____"立即关闭终端

batch-file - 从之前的构建中获取环境变量

docker - 使用私有(private) docker 镜像部署 gcloud 应用程序

maven - 在Spring Boot应用程序中基于 './mvnw clean install'构建docker镜像时无法运行 “openjdk:8-jdk-alpine”

ruby-on-rails - 如何在 Azure 上运行 Sidekiq?

java - Docker 化 Play 应用程序 - 下载互联网