Я создал конфигурацию docker для запуска интеграционных тестов с docker -compose. Тем не менее, услуги, которые тесты зависят от того, чтобы остаться после завершения тестов. Я пробовал много способов запустить эту настройку, включая предложения в этом вопросе , но безрезультатно.
Службы могут быть успешно остановлены с помощью docker-compose down
, однако я бы действительно как они будут остановлены автоматически при выходе из службы tests
. Использование команды docker-compose run tests && 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
в root:
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
Спасибо за ваше помощь!