Преобразование файла docker-compose в bash для автоматического запуска тестов - PullRequest
0 голосов
/ 30 июня 2018

В настоящее время я работаю над приложением и хочу выполнить автоматическое тестирование Express, прежде чем отправлять код в производство.

У меня есть файл docker-compose, который я могу использовать для запуска моих тестов

version: '8'
services:
  express:
    build: services/comp/express
    ports:
      - "3000:3000"
  database:
    image: mongo:3.4.0
    ports:
      - "27017:27017"

Однако я хочу иметь возможность запускать их через скрипт bash (мне не нужны два файла, создающих docker).

Я попробовал команду

docker run -d -p 27017:27017 mongo:3.4.0

чтобы запустить мою базу данных и запустить мой экспресс-сервер, я попробовал

docker build -t express_image ./comp/services/express/.
docker run -p 3000:3000 -t express_image

Однако я не могу запустить мои тесты следующим образом. Я получаю сообщение об ошибке «Не удается подключиться к базе данных при первой попытке», поэтому я предполагаю, что я использую неправильный хост для своей базы данных. При использовании файла docker-compose я пытался const dbHost = 'mongodb://database/test-db'; подключиться к базе данных, которая работает. При попытке запустить с помощью вышеуказанных команд, я попытался

const dbHost = 'mongodb://localhost:27017/';

Какой-нибудь совет, что я делаю неправильно, чтобы раскрутить два контейнера через терминал?

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Вам нужно сделать пару вещей, чтобы Docker создал и использовал внутреннюю сеть, чтобы его внутреннее разрешение DNS работало. Docker Compose делает это автоматически для вас, но если вы запускаете команды Docker вручную, вам нужно сделать это вручную.

Сначала создайте сеть с параметрами по умолчанию:

docker network create mean

Затем, когда вы запустите контейнеры, присоедините их к этой сети и явно дайте им имена:

docker run -d --net mean --name database -p 27017:27017 mongo:3.6.2
docker build -t expressapp ./services/express
docker run -d --net mean --name express -p 3000:3000 expressapp

Если расположение базы данных в константе в коде, как вы иллюстрировали, вы найдете это негибким, если вы когда-нибудь измените расположение базы данных. Вы можете установить его из переменной среды, используя process.env в своем коде узла и опцию docker run -e, чтобы установить фактическое местоположение при запуске контейнера.

0 голосов
/ 30 июня 2018

Что я понимаю сверху ... при использовании одиночного docker-compose для автоматического тестирования experess вы использовали const dbHost ='mongodb://database/test-db', и он работал нормально.

Теперь вы развернули контейнер без docker-compose и пытаетесь получить доступ к БД из экспресс-контейнера, используя const dbHost = 'mongodb://localhost:27017/';

Причина не работает .. здесь локальный хост - это ваш экспресс-контейнер, а не хост-машина Docker, где вы подключили порт контейнера mongodb.

Заменить на -> const dbHost = 'mongodb://${docker_host_ip}:27017/';

Docker_host_ip будет ip docker_bridge для работы в сети. Как 172.16.0.1 (для хост-машины Docker).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...