【问题标题】:How to use docker run with a Meteor image?如何将 docker run 与 Meteor 图像一起使用?
【发布时间】:2017-10-18 03:03:15
【问题描述】:

我有 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,但是demo就可以了)

【问题讨论】:

  • 对我来说似乎是 DNS 解析问题。设置 MONGO_URL 参数时,可以用 IP 地址代替 mgmt-mongo 吗?
  • @RamanSailopal 但为什么它可以与docker-compose 一起使用,在这个中它不是ip 而是名称?并且错误与名称相同failed to connect to server...

标签: bash mongodb shell docker docker-compose


【解决方案1】:

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

  1. --link 将应用容器标记为链接到 mongo 容器。这有效,但已弃用。
  2. defined docker network 用于链接两个容器;这更复杂,但是推荐的架构

相比之下,docker-compose automatically adds both containers to the same docker network,因此无需任何额外配置即可立即连接:

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

【讨论】:

    猜你喜欢
    • 2016-01-30
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多