我有2个容器mgmt-app是Meteor容器而mgmt-mongo是MongoDB。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7b65be4ac454 gitlab-lab:5005/dfc/mongo:latest "/entrypoint.sh mongo" About an hour ago Up About an hour 27017/tcp mgmt-mongo
dff0b3c69c5f gitlab-lab:5005/dfc/mgmt-docker-gui:lab "/bin/sh -c 'sh $METE" About an hour ago Up 42 minutes 0.0.0.0:80->80/tcp mgmt-app
我想从Docker主机运行docker run gitlab-lab:5005/dfc/mgmt-docker-gui:lab ls -al
但我有这个错误:
=> Starting meteor app on port:80
/app/programs/server/node_modules/fibers/future.js:280
throw(ex);
^
Error: MONGO_URL must be set in environment
所以我试过了:
docker run -e "MONGO_URL=mongodb://mgmt-mongo:27017/meteor" gitlab-lab:5005/dfc/mgmt-docker-gui:lab ls -al
然后错误是:
/app/programs/server/node_modules/fibers/future.js:313
throw(ex);
^
MongoError: failed to connect to server [mgmt-mongo:27017] on first connect
我真的不明白,因为当我使用此文件docker-compose up -d
时:
mgmt-app:
image: gitlab-lab:5005/dfc/mgmt-docker-gui:latest
container_name: mgmt-app
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- $HOME/.docker:/root/.docker
- /home/dockeradm/compose/area:/home/dockeradm/compose/area
environment:
- ROOT_URL=http://localhost:80
- MONGO_URL=mongodb://mgmt-mongo:27017/meteor
ports:
- 80:80
restart: always
mgmt-mongo:
image: gitlab-lab:5005/dfc/mongo:latest
container_name: mgmt-mongo
volumes:
- mgmt_mongo_data_config:/data/configdb
- mgmt_mongo_data_db:/data/db
restart: always
一切顺利。
所以我的要求是,我应该怎样做docker run
来执行我的命令? (该命令不是简单的ls -al
,但它可以用于演示)
答案 0 :(得分:1)
当您使用docker run
单独运行容器时,它们不会在同一个docker网络上链接,因此无法从应用程序容器访问mongo容器。要解决此问题,您应该使用:
--link
将应用容器标记为链接到mongo容器。这有效,但已被弃用。相比之下,docker-compose automatically adds both containers to the same docker network,因此无需任何额外配置即可立即连接:
默认情况下,Compose会为您的应用设置一个network。服务的每个容器都加入默认网络,并且可以被该网络上的其他容器访问,并且可以通过与容器名称相同的主机名发现。