0

docker-py を使用してコンテナーを実行し、ポートをホストにバインドしようとしています。申し訳ありませんが、私は Docker を試したことがありませんが、多くのことを試してみましたが、自分の間違いがどこにあるのかわかりません。

私のdocker 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)

コンテナは作成されますが、 bind はありません:

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}

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

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

よろしくお願いします!

4

1 に答える 1

1

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

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)

コンテナを起動すると、ポートがバインドされます。

于 2016-03-22T14:56:44.733 に答える