我如何从一个 docker 容器中看到另一个 docker 容器?
From a docker container how do I see another docker container?
基于:
https://github.com/osixia/docker-phpLDAPadmin
我是 运行 OpenLDAP 和 phpLDAPadmin 容器:
docker run --name ldap-service --hostname ldap-service --detach -p 389:389 -p 636:636 --detach osixia/openldap:1.1.8
docker run --name phpldapadmin-service --hostname phpldapadmin-service --link ldap-service:ldap-host --env PHPLDAPADMIN_LDAP_HOSTS=ldap-host --detach osixia/phpldapadmin:0.7.1
(根据下面的建议,我也尝试了 -p 689:689
并在 jira 中进行了相应的调整,但得到了同样的错误)。
我还从 JIRA 图像启动另一个容器:
docker run -p 0.0.0.0:8087:8087 -d --name mycontainer jiraimage tail -f/dev/null
在主机上的浏览器中,我可以访问 phpldapadmin Web 界面:
和吉拉:
接下来,我尝试在 JIRA 中配置一个指向 运行 OpenLDAP 服务器的 LDAP 目录,但出现以下错误:
Connection test failed. Response from the server:
ldap-service:636; nested exception is javax.naming.CommunicationException: ldap-service:636 [Root exception is java.net.UnknownHostException: ldap-service]
所以 JIRA 容器似乎看不到 OpenLDAP 容器的主机名。
我也尝试过:172.17.0.3
在 jira 端,但结果相同。
如何让 jira 容器看到 OpenLDAP 容器?
更多信息:
# docker version
Client:
Version: 17.09.0-ce
API version: 1.32
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:42:45 2017
OS/Arch: linux/amd64
Server:
Version: 17.09.0-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:41:24 2017
OS/Arch: linux/amd64
Experimental: false
并且:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de167e404cc3 jiraimage tail -f /dev/null" 6 seconds ago Up 4 seconds 0.0.0.0:8087->8087/tcp mycontainer
3a4a771037ac osixia/phpldapadmin:0.7.1 "/container/tool/run" 6 seconds ago Up 5 seconds 80/tcp, 443/tcp phpldapadmin-service
aa2d78fdcd99 osixia/openldap:1.1.8-001 "/container/tool/run" 7 seconds ago Up 5 seconds 0.0.0.0:389->389/tcp, 0.0.0.0:636->636/tcp, 636/tcp ldap-service
基于以下关于创建用户定义网络的回答,我现在有一个连接:
我首先创建一个用户定义的网络:
docker network create --driver bridge sample-network
并启动我的容器:
docker run --network=sample-network --name ldap-service --hostname ldap-service --detach -p 389:389 -p 636:636 --detach osixia/openldap:1.1.8
docker run --network=sample-network --name phpldapadmin-service --hostname phpldapadmin-service --env PHPLDAPADMIN_LDAP_HOSTS=ldap-host --detach osixia/phpldapadmin:0.7.1
docker run --network=sample-network -p 0.0.0.0:8087:8087 -d --name mycontainer jiraimage tail -f/dev/null
我必须从 LDAP 容器中删除:--link ldap-service:ldap-host
,这样 phpadmin 就无法再连接到 openldap:
我需要更改什么才能重新启用它?
只需首先定义一个 网络 并将您的两个容器添加到该网络。
参见 docker container networking。
(这取代了 obsolete legacy container links )
然后您可以使用其容器 IP 地址引用您的 LDAP。
Containers connected to the default bridge network can communicate with each other by IP address. Docker does not support automatic service discovery on the default bridge network.
作为 BMitch adds ,您应该使用其服务名称引用 ldap,而不是 ldap-host
:
--env PHPLDAPADMIN_LDAP_HOSTS=ldap-service
基于: https://github.com/osixia/docker-phpLDAPadmin
我是 运行 OpenLDAP 和 phpLDAPadmin 容器:
docker run --name ldap-service --hostname ldap-service --detach -p 389:389 -p 636:636 --detach osixia/openldap:1.1.8
docker run --name phpldapadmin-service --hostname phpldapadmin-service --link ldap-service:ldap-host --env PHPLDAPADMIN_LDAP_HOSTS=ldap-host --detach osixia/phpldapadmin:0.7.1
(根据下面的建议,我也尝试了 -p 689:689
并在 jira 中进行了相应的调整,但得到了同样的错误)。
我还从 JIRA 图像启动另一个容器:
docker run -p 0.0.0.0:8087:8087 -d --name mycontainer jiraimage tail -f/dev/null
在主机上的浏览器中,我可以访问 phpldapadmin Web 界面:
和吉拉:
接下来,我尝试在 JIRA 中配置一个指向 运行 OpenLDAP 服务器的 LDAP 目录,但出现以下错误:
Connection test failed. Response from the server:
ldap-service:636; nested exception is javax.naming.CommunicationException: ldap-service:636 [Root exception is java.net.UnknownHostException: ldap-service]
所以 JIRA 容器似乎看不到 OpenLDAP 容器的主机名。
我也尝试过:172.17.0.3
在 jira 端,但结果相同。
如何让 jira 容器看到 OpenLDAP 容器?
更多信息:
# docker version
Client:
Version: 17.09.0-ce
API version: 1.32
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:42:45 2017
OS/Arch: linux/amd64
Server:
Version: 17.09.0-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:41:24 2017
OS/Arch: linux/amd64
Experimental: false
并且:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de167e404cc3 jiraimage tail -f /dev/null" 6 seconds ago Up 4 seconds 0.0.0.0:8087->8087/tcp mycontainer
3a4a771037ac osixia/phpldapadmin:0.7.1 "/container/tool/run" 6 seconds ago Up 5 seconds 80/tcp, 443/tcp phpldapadmin-service
aa2d78fdcd99 osixia/openldap:1.1.8-001 "/container/tool/run" 7 seconds ago Up 5 seconds 0.0.0.0:389->389/tcp, 0.0.0.0:636->636/tcp, 636/tcp ldap-service
基于以下关于创建用户定义网络的回答,我现在有一个连接:
我首先创建一个用户定义的网络:
docker network create --driver bridge sample-network
并启动我的容器:
docker run --network=sample-network --name ldap-service --hostname ldap-service --detach -p 389:389 -p 636:636 --detach osixia/openldap:1.1.8
docker run --network=sample-network --name phpldapadmin-service --hostname phpldapadmin-service --env PHPLDAPADMIN_LDAP_HOSTS=ldap-host --detach osixia/phpldapadmin:0.7.1
docker run --network=sample-network -p 0.0.0.0:8087:8087 -d --name mycontainer jiraimage tail -f/dev/null
我必须从 LDAP 容器中删除:--link ldap-service:ldap-host
,这样 phpadmin 就无法再连接到 openldap:
我需要更改什么才能重新启用它?
只需首先定义一个 网络 并将您的两个容器添加到该网络。
参见 docker container networking。
(这取代了 obsolete legacy container links )
然后您可以使用其容器 IP 地址引用您的 LDAP。
Containers connected to the default bridge network can communicate with each other by IP address. Docker does not support automatic service discovery on the default bridge network.
作为 BMitch adds ldap-host
:
--env PHPLDAPADMIN_LDAP_HOSTS=ldap-service