【发布时间】:2021-01-23 12:29:13
【问题描述】:
我正在尝试容器化 demo nodejs + reactjs + postgresql 应用程序,目录结构如下所示:
demo:
-client
-.env
- Dockerfile.client
- package.json
-server
- .env
- Dockerfile.server
- package.json
.env
docker-compose.yml
docker-compose.yml
version: '3.8'
services:
client:
container_name: ${APP_NAME}_fe
build:
dockerfile: ./client/Dockerfile.client
environment:
CHOKIDAR_USEPOLLING: "true"
image: ${APP_NAME}_img_fe
volumes:
- ./client:/app
- /app/node_modules
ports:
- 3000:3000
server:
container_name: ${APP_NAME}_be
build:
# context: .
dockerfile: ./server/Dockerfile.server
image: ${APP_NAME}_img_be
volumes:
- ./server:/app
- /app/node_modules
ports:
- 5000:5000
db:
container_name: ${APP_NAME}_db
image: postgres
build:
# context: .
dockerfile: ./server/Dockerfile.db
env_file: ./server/.env
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USER}
POSTGRES_DB: ${APP_NAME}
volumes:
- db-data:/var/lib/postgresql/data
ports:
- 5432:5432
volumes:
db-data:
name: ${APP_NAME}_db
我正在尝试将所有敏感数据(如密码和密钥)、api url 或端口保存在 .env 文件中,以便我将所有信息集中在一个地方,如下所示:
来自服务器的.env
PORT=5000
DB_PASSWORD=postgres
DB_USER=postgres
DB_NAME=demo
.env 在根级别
APP_NAME=demo
问题在于数据库服务(postgres 容器)的凭据在创建时不可见,所以我需要像这样对它们进行硬编码:
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
POSTGRES_DB: demo
有没有办法从 .env 文件中获取这些值?
LE:我认为一种方法是在应用程序的根目录中只保留一个 .env: -db 密码 -db 用户 -port(服务器和客户端) -api 网址
在这种情况下,我需要从客户端和服务器文件夹中访问 .env。
不确定这是不是一种常见的做法。
谢谢。
【问题讨论】:
标签: docker docker-compose environment-variables dockerfile