2016-03-22 4 views
0

docker-pyを使用してコンテナを実行し、ホストとポートをバインドしようとしています。私はドッカーと一緒に実験されていないのではないかと心配していますが、私は多くのことを試しています。私のミスがどこにあるか分かりません。docker-pyのコンテナとのポートバインドが機能しない

マイドッキングウィンドウAPIバージョンはここで1.22

あるコンテナを作成するための私のコードです:

from docker import Client 
cli = Client(base_url='tcp://172.16.3.87:2375', version='1.22') 
container_id = cli.create_container('busybox', 'ls', name='test', ports=[1111], host_config=cli.create_host_config(port_bindings={ 1111:8000 }, publish_all_ports=True)) 
print(container_id) 

コンテナが作成されますが、何のバインドはありません:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
d3ad8566958d busybox "ls" 42 seconds ago Created test 

しかし、ホストはコマンドを受信しました。私は2375ポートで着信トラフィックをキャプチャしました。結果は次のとおりです。

{"Tty": false, "NetworkDisabled": false, "Image": "busybox", "Cmd": ["ls"], "StdinOnce": false, "HostConfig": {"PortBindings": {"1111/tcp": [{"HostPort": "8000", "HostIp": ""}]}, "PublishAllPorts": true}, "AttachStdin": false, "MemorySwap": 0, "Memory": 0, "ExposedPorts": {"1111/tcp": {}}, "AttachStderr": true, "AttachStdout": true, "OpenStdin": false} 

ホストに直接バインドしようとすると、問題なく実行されます。

誰かが同じ問題を実験しましたか?

ありがとうございました!

答えて

0

投稿したコードによってコンテナが作成されます。ポートをバインドするには、コンテナを起動する必要があります。

from docker import Client 
cli = Client(base_url='tcp://172.16.3.87:2375', version='1.22') 
container_id = cli.create_container(
    'busybox', 
    'ls', 
    name='test', 
    ports=[1111], 
    host_config=cli.create_host_config(port_bindings={ 1111:8000 }, publish_all_ports=True) 
) 

response = cli.start(container=container_id.get('Id')) 
print(container_id) 
print(response) 

コンテナを起動したら、ポートをバインドする必要があります。

+0

ありがとうございます。私はそれを試みたが、それは問題を解決しません: –

+0

編集:あなたのソリューションは実際に動作し、コンテナをポートをバインドするために開始する必要があります。しかし、私は 'ls'を 'top'に置き換える必要がありました。ビジーボックスlsでは、コンテナを即座に停止させるためです。あなたの答えをありがとう –

関連する問題