在 docker-py 中公开网络上的端口

Exposing ports on a network in docker-py

使用 Python docker 客户端 docker-py,如何创建连接到特定网络并公开特定端口的容器?

即撰写文件可能如下所示:

  foo:
    ...
    expose:
      - "1234"
    networks:
      - my-network

我们在 my-network 中公开了一个端口,但没有将其映射到主机。

使用 docker-py 的高级 containers.run 方法只允许使用它的 ports kwarg 进行端口映射(即在外部发布端口),而不是简单地在内部公开端口。
docker-py 的低级 create_container 方法不接受要使用的简单网络名称。

如何使用docker-py复制上面的compose文件?

谢谢

如你所见here,你可以通过主机ip,没有主机端口,这将让你的愿望成真。

docker.utils.create_host_config(port_bindings={1111: ('127.0.0.1',)})

"Expose" 作为动词并没有多大意义,因为 Docker 引入了多个命名为 Docker 的内部网络。您可以从 docker-compose.yml 文件中删除此设置,它不会影响任何东西;同一网络上的其他服务仍然可以访问您的服务。也就是应该够运行

client.containers.run('my-image', network: 'my-network')

据我所知,docker-py 库从不支持此选项(即使在 --link 是连接容器的唯一方式的时候,手动 --expose 也从不支持有用)。 docker/docker-py#2242 问了一个相似的问题,答案也相似。