【问题标题】:How to connect to an existing docker network with docker remote API (through dockerode)如何使用 docker remote API(通过 dockerode)连接到现有的 docker 网络
【发布时间】:2016-04-14 03:35:02
【问题描述】:

我使用docker-compose 来创建一个相互连接的容器“公园”。这里没什么特别的,我有 API/前端/后端等。还有我的docker-compose.yml

version: "2"

services:
    api:
        build: ./deimos_api/docker
        ports:
            - "39999:80"
        volumes:
            - ./deimos_api:/root/deimos_api
    asset:
        build: ./deimos_asset/docker
        ports:
            - "8000:80"
        volumes:
            - ./deimos_asset:/root/deimos_asset
        depends_on:
            - api
        links:
            - api
    data-manager:
        build: ./deimos_data_manager/docker
        ports:
            - "3333:3333"
        volumes:
            - ./deimos_data_manager:/root/deimos_data_manager
        depends_on:
            - api
        links:
            - api
    backend:
        build: ./deimos_backend/docker
        ports:
            - "1080:80"
        volumes:
            - ./deimos_backend:/root/deimos_backend
            - /var/run/docker.sock:/var/run/docker.sock
        depends_on:
            - api
            - asset
        links:
            - api

我刚刚了解到在新网络上创建一个像这个链接容器一样的“公园”。 docker network ls 结果:

NETWORK ID          NAME                DRIVER
448daa341d56        bridge              bridge              
c7feeeb44cd0        deimos_default      bridge              
1fc2d6132b86        none                null                
a80e41eab3cc        host                host   

项目的另一部分是动态生成容器。但我希望新容器能够访问之前由docker-compose 创建的deimos_api 容器。

我在 javascript 中使用dockerode(Docker Remote API 的包装器),代码如下:

docker.createContainer({
    "Image": config.dockerGameServerImageName,
    "name": config.gameServerPrefix + serverName,
    "Volumes": {"/root/deimos_server":{}}
}, function (err, container) {
    if(err){
        console.log(err);
        reject(err);
    } else {
        container.start({
            "PortBindings": { "80/tcp": [{"HostPort": lastPortUsed+""}]},
            "Binds":[config.deimosServerVolumePath+":/root/deimos_server"],
            "Links":[config.dockerApiContainerName+":api"]
        }, function (err, data) {if(err) {
                console.log(err);
                reject(err);
            } else {
                console.log("Create container " + serverName);
                gameContainer[config.gameServerPrefix + serverName] = lastPortUsed+"";
                resolv({
                    'serverPort':lastPortUsed,
                    'serverName':serverName
                });
            }
        });
    }
});

但我有以下错误:

Error: HTTP code is 500 which indicates error: server error - Could not get container for deimos_api_1

知道如何在 dockerode 中指定如何加入特定网络(此处为 deimos_default)吗?

谢谢。

编辑:我正在使用 docker 1.10.3、docker-compose 1.6.2 和 dockerode 2.2.10

【问题讨论】:

    标签: docker docker-compose docker-api


    【解决方案1】:

    我找到了!

    在 dockerode 启动过程中添加以下选项可以解决问题!

    "HostConfig": {
        "NetworkMode": "deimos_default"
    }
    

    在此处查找文档中的行:https://docs.docker.com/engine/reference/api/docker_remote_api_v1.22/#create-a-container

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      相关资源
      最近更新 更多