2016-12-07 10 views
3

Я пытаюсь получить доступ к командам mongorestore/mongodump из образа докера, который был запущен через gitlab-ci-multirunner.Как получить доступ к mongorestore/mongodump в докере image

Мой .gitlab-ci.yml выглядит примерно так:

image: node:7.2.0 

cache: 
    key: "$CI_BUILD_REF_NAME" 
    paths: 
    - node_modules/ 

services: 
    - mongo 

variables: 
    DOCKER_ENV: 'true' 
    NODE_ENV: 'test' 

all_tests: 
    script: 
    - npm install 
    - npm install tsd -g 
    - tsd install --save 
    - node_modules/typescript/bin/tsc -p . 
    - node node_modules/mocha/bin/_mocha --recursive tests --timeout 15000 

В моих тестах я mongodump/mongorestore. Ошибки я получаю:

Create Transaction Tests

Connected to MongoDB: mongodb://mongo:27017/test-db { Error: Command failed: mongorestore --port 27017 --drop /builds/project/repo/project/tests/testData/db/mongo/dump

/bin/sh: 1: mongorestore: not found

Я даже попытался запустить команду mongorestore с "Docker запуска" в разделе скриптов:

- docker run --rm --link mongodb:mongo -v /root:/backup mongo bash -c ‘mongorestore /backup --host $MONGO_PORT_27017_TCP_ADDR’ 

Я получаю эту ошибку:

/bin/bash: line 61: docker: command not found

Я должен упомянуть, что я запускаю этот образ на общем docker runner, предоставляемом gitlab.

Любые советы о том, как я могу получить доступ к команде «mongorestore» из моего теста?

+0

Могу ли я спросить, хотите ли вы запустить mongodump и mongorestore в своем контейнере докеров-узлов, потому что именно так они будут запускаться на производстве? Или это просто для тестов, настройка тестовых данных? –

+0

Просто для тестирования и настройки данных. –

+1

Если вы не нуждаетесь в них в производстве, то, возможно, вам также не придется иметь их в контейнере при тестировании. Стоит изучить [использование отдельного контейнера для посева ваших данных] (http://stackoverflow.com/a/33397913) или посмотреть, можете ли вы сбросить/создать тестовые данные, используя стандартные вызовы mongo. –

ответ

2

Не самое элегантное решение, но вы всегда можете создать собственное изображение поверх узла: 7.2.0, на котором установлена ​​mongo, что позволяет контейнеру выполнять mongodump/restore. Файл Docker для такого изображения должен выглядеть так: FROM node:7.2.0 RUN apt-get update -y && \ apt-get install -y mongodb

Затем вы можете вытащить это изображение вместо изображения обычного узла и предоставить вам mongo cli.

+0

Благодарим вас за ответ. В случае, если кому-то еще интересно, чтобы использовать те же самые бегуны, я использовал реестр Gitlab: https://about.gitlab.com/2016/05/23/gitlab-container-registry/. –