【问题标题】:Environment variables are not set in docker container using docker-compose.yml未使用 docker-compose.yml 在 docker 容器中设置环境变量
【发布时间】:2018-06-08 09:15:54
【问题描述】:

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

# DEV
SALES_DB_HOST=xxx

然后我有一个docker-compose.yml 文件,看起来像:

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

但是,当在 nodejs 中访问环境变量的值时,例如process.env.SALES_DB_HOST,它会打印出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 .

【问题讨论】:

  • 为什么你有一个额外的process.env 在那里? this question 有帮助吗?
  • @BMitch 抱歉,这是问题中的错字。我在我的代码中使用了process.env.SALES_DB_HOST

标签: docker environment-variables


【解决方案1】:

你能在 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

【讨论】:

    【解决方案2】:

    这不是码头工人的问题。 查看您的代码:

    process.env.process.env.SALES_DB_HOST
    

    这是错字。 process.env.process.env

    你应该使用

    process.env.SALES_DB_HOST
    

    【讨论】:

    • 对不起,错字出现在我的问题中,而不是在代码中。我一直在使用process.env.SALES_DB_HOST
    猜你喜欢
    • 1970-01-01
    • 2016-07-16
    • 2020-12-07
    • 2022-11-17
    • 2016-12-07
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多