我想在不同主机上的一些码头容器中运行一个任务。我还编写了一个管理应用程序来管理容器(启动任务、停止任务、获取状态等)。一旦容器启动,它将发送一个http请求到管理器及其地址和端口,因此管理器将知道如何管理容器。
由于可能有多个容器运行在同一台主机上,因此它们将被映射到不同的端口。要在我的经理上注册一个容器,我必须知道每个容器映射到哪个港口。
如何将映射的端口放在(一个码头容器)内?
这里有一个解决方案,如何从码头集装箱中知道主机的映射端口?。但是,如果我使用-P运行容器,则不适用。由于这个问题是一年多前提出的,我想知道是否有一个新的特性添加到码头,以解决这个问题。
发布于 2015-09-07 21:15:20
一旦容器启动,它将向管理器发送http请求,并提供其地址和端口。
这是行不通的。从容器内部,您无法确定容器端口映射到哪个码头主机端口。
我能想到的是让容器打开到管理器的websocket连接,这才是最接近您描述的工作方式。这样的连接将允许在您的管理器和容器之间进行两种方式的通信,同时仍然处于HTTP之上。
你想要达到的目标叫做服务发现。已经有用于服务发现的工具可以与Docker一起工作。你应该从中挑一个,而不是试着做自己的。
例如,见:
如果您真的想实现您的服务发现系统,一种方法是让您的经理使用docker event命令(或码头客户累赘之一)。这将使您的经理能够得到容器创建/删除的通知,而不需要在容器端执行任何操作。
然后查询码头主机,找出用docker port映射到容器的端口。
发布于 2015-09-07 19:49:19
你也可以docker port container_id
医生
https://docs.docker.com/engine/reference/commandline/port/
来自医生的例子
$ docker port test
7890/tcp -> 0.0.0.0:4321
9876/tcp -> 0.0.0.0:1234
$ docker port test 7890/tcp
0.0.0.0:4321
$ docker port test 7890/udp
2014/06/24 11:53:36 Error: No public port '7890/udp' published for test
$ docker port test 7890
0.0.0.0:4321发布于 2016-12-14 13:19:07
我共享/var/run/docker.sock到容器并获取自己的信息
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock alpine:latest sh集装箱壳
env //get HOSTNAME
curl --unix-socket /var/run/docker.sock http://localhost/containers/3c6b9e44a622/json3c6b9e44a622是您的主机名。
https://stackoverflow.com/questions/32444612
复制相似问题