docker-py:在启动容器之前连接到网络

时间:2016-02-26 22:56:55

标签: python docker dockerpy docker-networking

直到最近,我才能在启动容器之前将容器附加到网络,如下所示:

params = {
    'image': 'busybox',
    'name': 'test',
}
result = docker_client.create_container(**params)
docker_client.connect_container_to_network(result['Id'], network_id)
docker_client.start(result['Id'])

但是,现在我总是收到错误,因为当我将容器连接到网络时,容器尚未启动:

APIError: 500 Server Error: Internal Server Error ("Container 0b1005fc86be565d1a54c44f89f2a60d338b541f8b73805c2a367116bf04a060 is not running")

我可以使用命令行客户端重现相同的错误:

% docker create --name test busybox
7aa04b908b2ec45a37f272809ec909116cfae5ae80a13c6596822ca4d9b39a0e
% docker network connect test 7aa04b908b2e
Error response from daemon: Container 7aa04b908b2ec45a37f272809ec909116cfae5ae80a13c6596822ca4d9b39a0e is not running

所以我需要在创建容器时直接将容器连接到网络:

% docker create --net=test busybox test

docker-py中,如何在创建过程中直接将容器附加到网络?

2 个答案:

答案 0 :(得分:2)

您可以使用HostConfig配置容器所连接的网络:

  从v1.11开始,

network_mode可用,并设置容器的网络模式('bridge':为Docker桥上的容器创建一个新的网络堆栈,'none':此容器没有网络, 'container:[name | id]':重用另一个容器网络堆栈'host':使用容器内的主机网络堆栈或标识现有Docker网络的任何名称。)

举个例子,你可以运行:

params = {
    'image': 'busybox',
    'name': 'test',
    'host_config': docker_client.create_host_config(network_mode='test')
}
docker_client.create_container(**params)

这会将容器连接到网络test

答案 1 :(得分:0)

尝试这种方式:

host_config = client.create_host_config(
    network_mode='my-net'
)
networking_config = client.create_networking_config({
    'my-net': client.create_endpoint_config(
    )
})
container = client.create_container(
    image='josepainumkal/vwadaptor:jose_toolUI',
    host_config=host_config,
    networking_config = networking_config
)