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

时间:2019-12-13 16:44:12

标签: python docker dockerpy

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

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

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

我们公开了我的网络中的端口,而没有将其映射到主机。

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

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

谢谢

2 个答案:

答案 0 :(得分:1)

如您所见here,您可以不带主机端口而传递主机ip,这将使您的愿望成真。

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

答案 1 :(得分:1)

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

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

据我所知,docker-py库从不支持该选项(即使在--link是连接容器的唯一方法期间,手动--expose也从未如此有用)。 docker/docker-py#2242提出了类似的问题,并给出了类似的答案。