現象
久しぶりに MongoDB 使おうとしたら以前使っていた docker-compose(mongo-express の方)が動かなくなっていた。
docker-compose.yml
version: "3.1"
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: user
MONGO_INITDB_ROOT_PASSWORD: secret
MONGO_INITDB_DATABASE: app_marketing
ports:
- 27017:27017
volumes:
- ./configdb:/data/configdb
- mongoDataStore:/data/db
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: user
ME_CONFIG_MONGODB_ADMINPASSWORD: secret
volumes:
mongoDataStore:
driver: local
こんなの。2020年9月にはこれで動いていた模様。mongodb は動くけど、mongo-express は動かない。
環境
docker: 20.10.11
docker-compose: 1.29.2
docker hub の公式のものから作り直す
docker-compose.yml
# Use root/example as user/password credentials
version: '3.1'
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
動く。
volume を追加
docker-compose.yml
# Use root/example as user/password credentials
version: '3.1'
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
volumes:
- ./configdb:/data/configdb
- mongoDataStore:/data/db
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
volumes:
mongoDataStore:
driver: local
動かない。
原因と解決策
volume を使う場合は、mongo と mongo-express でネットワーク構成を共有しないと、この問題が起こる。
docker-compose.yml
# Use root/example as user/password credentials
version: '3.1'
services:
mongo:
container_name: mongo-dev
image: mongo
restart: always
networks:
- mongo-compose-network
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
volumes:
- ./configdb:/data/configdb
- mongoDataStore:/data/db
mongo-express:
container_name: mongo-express
image: mongo-express
restart: always
ports:
- 8081:8081
networks:
- mongo-compose-network
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
networks:
mongo-compose-network:
driver: bridge
volumes:
mongoDataStore:
driver: local
これで動きました。