我是码头新来的。我成功地创建了一个PostgreSQL容器my -数据库,并且我能够使用服务器地址、、本地主机和端口从本地计算机上的SQLTools访问它。
我从以下命令获得了容器数据库的IP地址:
docker container inspect my-database但是当我回到SQLTools或PHP应用程序(而不是容器化的),尝试用我上面得到的IP地址连接到我的数据库时,它无法成功地连接。
我在这里错过了什么?
FYI,我还创建了另一个容器,并能够通过以下方式连接到我的-数据库:对我的数据库和第二个容器使用相同的网络。
发布于 2021-08-19 16:11:02
这完全取决于您如何启用对数据库的访问。
如果您的php服务运行在同一台机器上,那么如果它在同一网络中的另一台机器上运行,则localhost可以工作,然后使用分配给该机器的网络IP。如果您的php服务器位于完全不同的位置,那么您可能需要对您的docker容器使用类似于nginx反向代理的方法。
因此,在您的示例中,您应该获得运行db容器的ip:port,并使用该端口。Docker检查显示内部网络ip,它只帮助同一虚拟网络中的其他容器连接到容器。
发布于 2021-08-19 16:36:33
您不需要docker inspect IP地址。您只能在两种特定情况下才能连接到它:如果您位于同一Docker网络上的不同容器中,或者(a)根本不在容器中,(b)在同一主机上,(c)主机运行的是本地Linux,而不是不同的操作系统。
你已经找到了正确的答案。假设您启动容器为
docker network create any-network-name
docker run \
--name database \
--net any-network-name \
-p 5432:5432 \
postgres从any-network-name网络上的另一个Docker容器中,您可以使用database容器名称作为DNS名称,并避免手动IP查找;忽略任何-p选项,并使用服务的“正常”端口。在容器外部,您可以使用主机的DNS名称或IP地址(或者,如果是同一个主机,使用localhost)和第一个-p端口号。
如果您在Docker中运行此操作,它将自动为您创建一个网络,并在其组合服务名称下注册容器;您不需要networks:、container_name:或其他类似的设置。
version: '3.8'
services:
database:
image: postgres
ports: ['5432:5432']
application:
build: .
environment:
- PGHOST=postgreshttps://stackoverflow.com/questions/68850693
复制相似问题