在docker完成测试后停止dependee服务

在docker完成测试后停止dependee服务,docker,docker-compose,Docker,Docker Compose,我已经创建了一个docker配置,用于运行与docker compose的集成测试。但是,测试所依赖的服务将在测试完成后继续运行。我尝试了许多运行此设置的方法,包括中的建议,但都没有效果 使用docker compose down可以成功停止服务,但是我真的希望在tests服务退出时自动停止服务。使用命令docker-compose运行测试和&docker-compose-down可以工作,但我发现它相当难看。一种解决方法是将其包含在我的package.json脚本中。但是,我想知道,是否可以通

我已经创建了一个docker配置,用于运行与docker compose的集成测试。但是,测试所依赖的服务将在测试完成后继续运行。我尝试了许多运行此设置的方法,包括中的建议,但都没有效果

使用
docker compose down
可以成功停止服务,但是我真的希望在
tests
服务退出时自动停止服务。使用命令
docker-compose运行测试和&docker-compose-down
可以工作,但我发现它相当难看。一种解决方法是将其包含在我的
package.json
脚本中。但是,我想知道,是否可以通过一个
docker compose
命令来实现这一点,即更改我的
docker compose.yml
Dockerfile

可以找到有问题的项目和提交

docker compose.yml的内容:

version: "3.2"

services:
  app:
    build: .
    ports:
      - 3001:3001
    container_name: vyardage-app
    environment:
      - NODE_ENV=development
      - DATABASE_URL=postgresql://postgres:postgres@db:5432/postgres
    depends_on:
      - db

  test-app:
    build: .
    ports:
      - 3001:3001
    container_name: test-app
    environment:
      - NODE_ENV=test
      - DATABASE_URL=postgresql://postgres:postgres@test-db:5432/postgres
    depends_on:
      - test-db

  db:
    image: postgres:12.2
    container_name: vyardage-db
    environment:
      - PGDATA=/data
      - POSTGRES_PASSWORD=postgres
    volumes:
      - ./pg_data:/data
    ports:
      - 5432:5432

  test-db:
    image: postgres:12.2
    container_name: test-db
    environment:
      - POSTGRES_PASSWORD=postgres
    ports:
      - 5432:5432

  tests:
    build: ./e2e/
    container_name: vyardage-test
    environment:
      - CYPRESS_BASE_URL=http://test-app:3001
    depends_on:
      - test-app
    volumes:
      - ./e2e/cypress:/e2e/cypress
根目录中的
Dockerfile
内容:

FROM node:12.16

# Port can be configure via --build-arg.
ARG port=3001

# Install frontend dependencies.
WORKDIR /usr/src/app/client
COPY client/package.json client/package-lock.json ./
RUN npm ci

# Install backend dependencies.
WORKDIR /usr/src/app/server
COPY server/package.json server/package-lock.json ./
RUN npm ci

# Build frontend.
WORKDIR /usr/src/app
COPY client client/
WORKDIR /usr/src/app/client
RUN npm run build
RUN cp -r build/ ../server/public

# Build backend.
WORKDIR /usr/src/app
COPY server server/
WORKDIR /usr/src/app/server
RUN npm run build

EXPOSE $port

CMD npm start

谢谢你的帮助

老实说,我不认为写摘要有什么问题。您可以创建一个.sh脚本,其中包含所有命令,然后是that.Gotcha。目前我的解决方案是使用npm脚本“测试”:“docker compose构建测试应用程序和docker compose运行测试;docker compose down”。