1

您可以在下面看到我的项目文件夹结构的表示。我有两个称为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文件。

4

0 回答 0