我如何从一个 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 界面:

https://172.17.0.3/

和吉拉:

http://localhost:8087

接下来,我尝试在 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