docker - docker-compose:从docker容器访问localhost

标签 docker docker-compose

我有在docker容器中运行的服务。该服务需要访问在另一个集群中运行的数据库(我使用kubectl port-forward,之后访问localhost:5432中的数据库)

这是我的docker-compose文件

version: '3'

services:
  api:
    build: .
    ports:
      - "8000:8000"
      - "5432:5432"
    environment:
      - APP_PORT=8000 
      - DB_SERVER=localhost
      - DB_PORT=5432
      - DB_USER=postgres
      - DB_PASSWORD=mypassword 

似乎端口5432的重定向未按预期工作,因为容器内与数据库的连接失败。您能帮我了解出什么问题吗?

最佳答案

在当前上下文中, localhost api 容器地址。您必须将 DB_SERVER 设置为正确的地址。您的服务和数据库必须位于相同的docker网络中,然后才能使用内部docker地址解析器。之后,您应该设置DB_SERVER = postgres。另一种方法是,可以将DB_SERVER设置为主机地址。

这是您可以在docker-compose中定义网络的方法:
https://docs.docker.com/compose/networking/#use-a-pre-existing-network

关于docker - docker-compose:从docker容器访问localhost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50464614/

相关文章:

docker-compose:容器时区

docker - Traefik:级别=错误消息=“field not found, node: mywebsite”提供商名称=docker

node.js - OCI 运行时执行失败 : exec failed: container_linux. go:344: 启动容器进程

docker - 如何让 docker-compose 始终从新图像重新创建容器?

ubuntu - 无法连续移除所有容器

postgresql - 将 plpython3 扩展添加到 Postgres/timescaledb Alpine Docker Image

c# - 使用 docker 在 Linux 上运行 .net Framework 应用程序的最佳方式是什么

Docker:执行shell脚本时出现错误代码127

docker - Docker:在镜像创建期间修改文件

selenium - 构建你自己的 SeleniumHQ/docker-selenium docker 镜像