Выполнить команду после запуска контейнера - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь выполнить команду после запуска Docker-контейнера.
Вот мой Dockerfile

FROM mysite:myport/mongo:3.6
EXPOSE 27017
ADD mongo.js /data/mongodb/scripts/

Вот мой Docker-compose.yml

mongo:
    image: test-mongo
    container_name: test-mongo
    hostname: mongo
    expose:
      - "27017"
    ports:
      - "27017:27017"
    command: mongo --eval load("/data/mongodb/scripts/mongo.js")   

docker-compose --no-ansi up возвращает меня

Creating test-mongo ...
Creating test-mongo ... done
Attaching to test-mongo
test-mongo | MongoDB shell version v3.6.5
test-mongo | connecting to: mongodb://127.0.0.1:27017
test-mongo | 2018-06-09T15:46:50.229+0000 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), rea
son: Connection refused
test-mongo | 2018-06-09T15:46:50.229+0000 E QUERY    [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
test-mongo | connect@src/mongo/shell/mongo.js:251:13
test-mongo | @(connect):1:6
test-mongo | exception: connect failed
test-mongo exited with code 1

Я не понимаю, как я могу загрузить свой файл после запуска mongodb

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Если все, что вы пытаетесь сделать, это инициализировать новую базу данных, например, создать новую схему и добавить пользователя, вы можете создать сценарий инициализации и загрузить его в контейнер.Из документации Docker Hub :

Когда контейнер запускается в первый раз, он будет выполнять файлы с расширениями .sh и .js, которые находятся в / docker-entrypoint-initdb.d.Файлы будут выполнены в алфавитном порядке.Файлы .js будут выполняться mongo с использованием базы данных, указанной в переменной MONGO_INITDB_DATABASE, если она есть, или протестировать иначе.Вы также можете переключать базы данных в скрипте .js.

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

Передав command в docker-compose.yaml, вы переопределяете нормальное поведение образа mongo, поэтому сервер mongo никогда не запускается.Обычно вы выполняете это, помещая свой сценарий в второе изображение, а затем запускайте второй контейнер как часть вашего docker-compose.yaml, который устанавливает сетевое соединение с сервером Монго.Что-то вроде:

version: "3"

services:
  mongo:
    image: mongo

  client:
    image: my-mongo-client
    restart: on-failure
    command: mongo --host mongo --eval load("/data/mongodb/scripts/mongo.js")

Директива restart приведет к автоматическому перезапуску контейнера клиента при сбое, что необходимо, поскольку он может попытаться подключиться до того, как сервер mongo станет доступен для обработки соединений.

...