如何使用 docker run with a Meteor 映像



我有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 容器。要解决此问题,您应该使用以下任一方法:

  1. --link将应用容器标记为链接到 mongo 容器。这有效,但已弃用。
  2. 为要链接的两个容器定义的 Docker 网络;这更复杂,但推荐的体系结构

相比之下,docker-compose 会自动将两个容器添加到同一个 docker 网络中,因此它们可以立即连接,而无需任何额外的配置:

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

最新更新