您可以在下面看到我的项目文件夹结构的表示。我有两个称为authand的微服务profile,它们位于services目录内。该docker-containers目录包含我的docker-compose.yaml文件,其中列出了我的应用程序的所有图像。
.
├── services
│ ├── auth
│ │ ├── src
│ │ ├── dist
│ │ ├── .env
│ │ ├── package.json
│ │ ├── Dockerfile
│ │ ├── .dockerignore
│ ├── profile
│ │ ├── src
│ │ ├── dist
│ │ ├── .env
│ │ ├── package.json
│ │ ├── Dockerfile
│ │ ├── .dockerignore
└── docker-containers
├── docker-compose.yaml
下面是我的docker-compose.yaml文件,我在其中定义了auth服务(和其他图像)的位置。我还想用列表.env中的值覆盖本地文件environment。但是当我运行 docker compose 项目时,我的本地.env文件中的值仍在使用中。
version: "3.8"
services:
auth:
build:
context: ../services/auth
container_name: auth-service
depends_on:
- redis
- mongo
ports:
- 3000:3000
volumes:
- ../services/auth/:/app
- /app/node_modules
command: yarn dev
env_file: ../services/auth/.env
environment:
FASTIFY_PORT: 3000
REDIS_HOST: redis
FASTIFY_ADDRESS: "0.0.0.0"
TOKEN_SECRET: 1d037ffb614158a9032c02f479b36f42dd33ba325f76a7692498c33839afc5d547eae2b47f0f4926b76b08fc91d19352
MONGO_URL: mongodb://root:example@mongo:27017
mongo:
image: mongo
container_name: mongo
restart: on-failure
ports:
- 2717:27017
volumes:
- ./mongo-data:/data
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
redis:
image: redis
container_name: redis
volumes:
- ./redis-data:/data
ports:
- 6379:6379
这是我Dockerfile和服务.dockerignore内的文件auth,根据我的理解,.env不应将本地文件复制到 docker 上下文中,因为它列在.dockerignore文件中。
但是,当我从 docker 应用程序的环境变量中记录一个值时,它仍然会从我的本地.env文件中记录旧值。
FROM node:16-alpine
WORKDIR /app
COPY ["package.json", "yarn.lock", "./"]
RUN yarn
COPY dist .
EXPOSE 3000
CMD [ "yarn", "start" ]
node_modules
Dockerfile
.env*
.prettier*
.git
.vscode/
奇怪node_modules的是服务的文件夹auth被忽略了,但由于某种原因,docker容器内的环境变量仍然基于本地.env文件。