Finalmente consegui conectar os dois contêineres. Minhas descobertas aqui para fins de documentação.
Pontos principais
docker-compose
a versão 2 cria umabridge
network e adiciona todos os contêineres a ela.mongod
não está ciente dessa rede e, portanto, não se vincula a esse ip. Por padrão, vincula apenas a127.0.0.1
mongoimport
não foi possível estabelecer a conexão usando o nome do contêiner, embora deva ser traduzido para o ip do contêiner.
Solução
- Atribua um IP estático para o mongodb por meio da definição explícita de uma
network
- Inicie o contêiner do mongo com
--bind_ip
sinalizador apontando para esse ip estático - Use o endereço IP em vez do nome do host com
mongoimport
docker-compose.yml
version: '2'
services:
mongodb:
image: mongo:3.2
ports:
- "27017:27017"
networks:
mongo_net:
ipv4_address: 172.16.0.1
command: mongod --bind_ip 127.0.0.1,172.16.0.1
mongo-seed:
build: ./mongo-seed
networks:
mongo_net:
depends_on:
- mongodb
networks:
mongo_net:
driver: bridge
ipam:
config:
- subnet: 172.16.0.0/24
gateway: 172.16.0.254
mongo-seed/Dockerfile
FROM mongo:3.2
COPY init.json /init.json
CMD mongoimport --host 172.16.0.1 --db test --collection users \
--type json --file /init.json --jsonArray