我有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
但对于演示来说还可以(
当您使用 docker run
单独运行容器时,它们不会在同一个 docker 网络上链接,因此无法从应用程序容器访问 mongo 容器。要解决此问题,您应该使用以下任一方法:
-
--link
将应用容器标记为链接到 mongo 容器。这有效,但已弃用。 - 为要链接的两个容器定义的 Docker 网络;这更复杂,但推荐的体系结构
相比之下,docker-compose 会自动将两个容器添加到同一个 docker 网络中,因此它们可以立即连接,而无需任何额外的配置:
默认情况下,Compose 会为应用设置单个网络。服务的每个容器都加入默认网络,并且该网络上的其他容器可以访问该容器,并且它们可以通过与容器名称相同的主机名发现。