Docker 正在使用我的 .env 文件中的变量,我不断收到错误消息:
未处理的拒绝 SequelizeConnectionError:角色“eli”不存在
我希望 Postgres 从设置的环境中获取变量 docker-compose.yml
.env
POSTGRES_PORT=5432
POSTGRES_DB=elitest4
POSTGRES_USER=eli
POSTGRES_PASSWORD=
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
# docker-compose.yml
version: "3"
services:
app:
build: .
depends_on:
- database
ports:
- 8000:8000
environment:
- POSTGRES_HOST=database
env_file:
- .env
database:
image: postgres:9.6.8-alpine
environment: # postgress should be getting these variables, not the variables set in the env file thats for localhost
POSTGRES_PASSWORD: password
POSTGRES_USER: user
POSTGRES_DB: db
volumes:
- pgdata:/var/lib/postgresql/pgdata
ports:
- 8002:5432
env_file:
- .env
react_client:
build:
context: ./client
dockerfile: Dockerfile
image: react_client
working_dir: /home/node/app/client
volumes:
- ./:/home/node/app
ports:
- 8001:8001
env_file:
- ./client/.env
volumes:
pgdata:
Run Code Online (Sandbox Code Playgroud)
TL/DR
尝试更新 docker-compose 服务数据库环境部分,如下所示:
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password}
POSTGRES_USER: ${POSTGRES_USER:-user}
POSTGRES_DB: ${POSTGRES_DB:-db}
Run Code Online (Sandbox Code Playgroud)
另请注意,如果您想查看每个绑定变量最终如何在 Compose 中求值,您可以运行以下命令来查看“有效”撰写文件:
$ docker-compose 配置
此命令将打印出您的撰写文件的外观,其中所有变量替换都替换为其评估。
请密切注意此部分:
当您在多个文件中设置相同的环境变量时,Compose 使用以下优先级来选择要使用的值:
Run Code Online (Sandbox Code Playgroud)1. Compose file 2. Shell environment variables 3. Environment file Dockerfile 4. Variable is not defined在下面的示例中,我们在环境文件和 Compose 文件上设置了相同的环境变量:
Run Code Online (Sandbox Code Playgroud)$ cat ./Docker/api/api.env NODE_ENV=test $ cat docker-compose.yml version: '3' services: api: image: 'node:6-alpine' env_file: - ./Docker/api/api.env environment: - NODE_ENV=production运行容器时,Compose 文件中定义的环境变量优先。
Run Code Online (Sandbox Code Playgroud)$ docker-compose exec api node process.env.NODE_ENV 'production'只有当环境或 env_file 没有 Docker Compose 条目时,Dockerfile 中的任何 ARG 或 ENV 设置才会进行评估。
NodeJS 容器的细节
如果您有like
package.json条目,则这会否决您文件中的任何设置。script:startNODE_ENV=test node server.jsdocker-compose.yml