Saya akhirnya bisa berhasil menghubungkan kedua wadah. Temuan saya di sini untuk tujuan dokumentasi.
Poin utama
docker-composeversi 2 membuatbridgejaringan dan menambahkan semua wadah ke dalamnya.mongodtidak mengetahui jaringan ini dan karena itu tidak mengikat ke ip itu. Secara default, hanya mengikat ke127.0.0.1mongoimporttidak dapat membuat koneksi menggunakan nama container, meskipun seharusnya diterjemahkan ke ip container.
Solusi
- Tetapkan IP statis untuk mongodb melalui definisi eksplisit dari
network - Init wadah mongo dengan
--bind_ipbendera menunjuk ke ip statis itu - Gunakan alamat ip sebagai ganti nama host dengan
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