首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用IP连接到集装箱化数据库?

如何用IP连接到集装箱化数据库?
EN

Stack Overflow用户
提问于 2021-08-19 15:33:48
回答 2查看 699关注 0票数 0

我是码头新来的。我成功地创建了一个PostgreSQL容器my -数据库,并且我能够使用服务器地址、、本地主机和端口从本地计算机上的SQLTools访问它。

我从以下命令获得了容器数据库的IP地址:

代码语言:javascript
复制
docker container inspect my-database

但是当我回到SQLTools或PHP应用程序(而不是容器化的),尝试用我上面得到的IP地址连接到我的数据库时,它无法成功地连接。

我在这里错过了什么?

FYI,我还创建了另一个容器,并能够通过以下方式连接到我的-数据库:对我的数据库和第二个容器使用相同的网络。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-19 16:11:02

这完全取决于您如何启用对数据库的访问。

如果您的php服务运行在同一台机器上,那么如果它在同一网络中的另一台机器上运行,则localhost可以工作,然后使用分配给该机器的网络IP。如果您的php服务器位于完全不同的位置,那么您可能需要对您的docker容器使用类似于nginx反向代理的方法。

因此,在您的示例中,您应该获得运行db容器的ip:port,并使用该端口。Docker检查显示内部网络ip,它只帮助同一虚拟网络中的其他容器连接到容器。

票数 0
EN

Stack Overflow用户

发布于 2021-08-19 16:36:33

您不需要docker inspect IP地址。您只能在两种特定情况下才能连接到它:如果您位于同一Docker网络上的不同容器中,或者(a)根本不在容器中,(b)在同一主机上,(c)主机运行的是本地Linux,而不是不同的操作系统。

你已经找到了正确的答案。假设您启动容器为

代码语言:javascript
复制
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:或其他类似的设置。

代码语言:javascript
复制
version: '3.8'
services:
  database:
    image: postgres
    ports: ['5432:5432']
  application:
    build: .
    environment:
      - PGHOST=postgres
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68850693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档