如何使用与Meteor图像运行的docker?

时间:2017-05-18 10:33:27

标签: bash mongodb shell docker docker-compose

我有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,但它可以用于演示)

1 个答案:

答案 0 :(得分:1)

当您使用docker run单独运行容器时,它们不会在同一个docker网络上链接,因此无法从应用程序容器访问mongo容器。要解决此问题,您应该使用:

  1. --link将应用容器标记为链接到mongo容器。这有效,但已被弃用。
  2. 一个defined docker network,用于连接两个容器;这个更复杂,但是推荐的架构
  3. 相比之下,docker-compose automatically adds both containers to the same docker network,因此无需任何额外配置即可立即连接:

      

    默认情况下,Compose会为您的应用设置一个network。服务的每个容器都加入默认网络,并且可以被该网络上的其他容器访问,并且可以通过与容器名称相同的主机名发现。