Контейнер Docker для тестирования приложений с базой данных postgres - PullRequest
0 голосов
/ 26 апреля 2018

Я новичок в Docker.

Я пытаюсь запустить тесты приложений моего узла в контейнере Docker. Я хочу запустить тесты с настоящим postgres db. Я создаю этот контейнер со следующим Dockerfile:

# Set image
FROM postgres:alpine
# Install node latest
RUN apk add --update nodejs nodejs-npm
# Set working dir
WORKDIR .
# Copy the current directory contents into the container at .
ADD src src
ADD .env.testing .env
ADD package.json .
ADD package-lock.json .

# Run tests
CMD npm install && npm run coverage
  1. Из документа документов, когда я запускаю контейнер с:

    $ docker run build-name -d postgres

Я вижу, что контейнеру требуется время для запуска сервиса postgresql.

  1. Когда я запускаю контейнер без параметра "-d postgres":

    $ docker run build-name

Служба не запускается, и тесты не выполняются из-за "не удалось подключиться к серверу".


Вопросы:

A. Как запустить тесты ПОСЛЕ запуска службы postgresql?

B. Я видел несколько примеров использования docker-composer, но могу ли я сделать это без composer?

Спасибо

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Благодаря @ Богдану я нашел полное решение:

Dockerfile должен быть:

# Set image
FROM postgres:alpine
# Install node latest
RUN apk add --update nodejs nodejs-npm
# Set working dir
WORKDIR .
# Copy the current directory contents into the container at .
ADD src src
ADD .env.testing .env
ADD package.json .
ADD package-lock.json .
# Install
RUN npm install

# Init container
CMD psql -U postgres -c "SELECT 1;" postgres

Сборка контейнера:

$ docker build -t test .

Запустить контейнер:

$ docker run --name startedtest -d test -d postgres

Запуск тестов после запуска conatiner:

$ docker exec startedtest some_create_schema_script && npm run coverage
0 голосов
/ 18 мая 2018

Если цель состоит в том, чтобы просто запустить тесты в контейнере Postgres , одним из решений может быть установка NodeJs в производном образе postgres:alpine и обычный запуск контейнера. После запуска базы данных вы можете запустить npm, используя docker exec следующим образом:

docker exec <container_id> npm run coverage
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...