使用Python docker客户端docker-py,如何创建一个连接到特定网络并公开特定端口的容器?
即撰写文件可能如下所示:
foo:
...
expose:
- "1234"
networks:
- my-network
我们公开了我的网络中的端口,而没有将其映射到主机。
使用docker-py的高级containers.run方法只允许使用端口ports
kwarg进行端口映射(即在外部发布端口),而不是在内部公开端口。
docker-py的低级create_container方法不接受要使用的简单网络名称。
如何使用docker-py复制上面的撰写文件?
谢谢
答案 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提出了类似的问题,并给出了类似的答案。