如何使用与meteor图像docker运行?

我有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用这个文件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单独运行容器时,它们不会在同一个dockernetworking上链接,因此无法从app容器访问mongo容器。 为了解决这个问题,你应该使用:

  1. --link将app容器标记为链接到mongo容器。 这工作,但不推荐使用。
  2. 为两个集装箱连接的一个定义的dockernetworking ; 这是比较复杂的,但是是推荐的架构

相比之下, docker-compose会自动将两个容器添加到同一个泊坞窗networking ,因此它们可以立即连接而不需要任何额外的configuration:

默认情况下,Compose会为您的应用程序设置一个networking 。 服务的每个容器都join默认networking,并且该networking上的其他容器都可以访问它们,并且可以通过与容器名称相同的主机名来发现它们。