我正在尝试在云提供商的容器中运行服务。我希望容器化应用程序能够通过本地 LDAP 服务器进行身份验证,该服务器(当前)可通过 SSH 隧道连接到云。该隧道在 上的 docker 主机上可用127.0.0.1:6636
。
是否可以让容器访问127.0.0.1:6636
主机,例如通过某种代理或 iptables 配置?
GatewayPorts=yes
如果我在主机中设置sshd_config
并将docker run --add-host
主机的docker0
IP 添加到/etc/hosts
容器中,我可以让隧道工作,但这意味着隧道在所有接口上都可用。我大概可以将对隧道的访问锁定到docker0
接口,但我宁愿隧道仅在环回接口上。
我不想使用--net=host
,因为我希望能够使用容器链接。
Cloud |
|
+------------------+ | +--------+ +----------+
| Host Tunnel | | | Tunnel | | Tunnel |
| O-------------------------------O Target |
| +-----------+ | | | | Host | +----------+
| | Container |--+ | | +--------+
| +-----------+ | |
+------------------+ | Premises
|
答案1
您可以将主机的 docker0 接口的 IP 作为环境变量传入并连接到 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 上,如果你. /etc/environment
:COREOS_PUBLIC_IPV4
并且COREOS_PRIVATE_IPV4