我试图在云提供商的容器中运行服务。 我希望容器化的应用程序能够通过本地LDAP服务器进行身份validation,该服务器当前可通过SSH隧道向云端提供。 在Docker主机上的127.0.0.1:6636上提供隧道。
是否有可能让容器访问主机上的127.0.0.1:6636 ,例如通过某种代理或iptablesconfiguration?
如果我在主机的sshd_config设置了GatewayPorts=yes并使用docker run --add-host将主机的docker0 IP添加到容器中的/etc/hosts中,但是这意味着该隧道可用所有接口。 我可以locking对docker0接口的隧道访问权限,但我宁愿隧道只在回环接口上。
我不想使用--net=host ,因为我想能够使用容器链接。
Cloud | | +------------------+ | +--------+ +----------+ | Host Tunnel | | | Tunnel | | Tunnel | | O-------------------------------O Target | | +-----------+ | | | | Host | +----------+ | | Container |--+ | | +--------+ | +-----------+ | | +------------------+ | Premises |
您可以将主机的docker0接口的IP作为环境variables传递给LDAP服务器。 举个例子,在主机上:
$ ip addr show docker0 5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff inet 10.1.42.1/16 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::60e4:ffff:fe97:1308/64 scope link valid_lft forever preferred_lft forever $ DOCKERADDR=$(ip addr show docker0 | grep inet\ | awk '{print $2}' | cut -d/ -f1) $ docker run -it -e DOCKERADDR=${DOCKERADDR} image
在容器的内部,你可以连接到$ {DOCKERADDR}:6636
注意:在coreos上,如果你已经有了你的环境中的这些variables. /etc/environment . /etc/environment : COREOS_PUBLIC_IPV4和COREOS_PRIVATE_IPV4