You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Docker容器间通过localhost访问?(配置限制场景)

让Docker容器通过localhost访问另一个容器的解决方案

问题背景

我有两个Docker运行配置:

配置1(PostgreSQL容器):

docker run  \
--name webapp_postgres \
-e POSTGRES_PASSWORD='abc123'  \
-e POSTGRES_DB="webapp"  \
-p5432:5432  \
-d postgres

配置2(Web应用容器):

docker run \
--name webapp \
-p8080:8443 \
appname/webapp

需求是让webapp容器内的应用通过localhost访问postgres容器,但目前无法修改应用的访问地址。尝试过自定义网络(通过--net加入同一网络)但无效,使用--net host虽然能访问5432端口,但导致无法正常访问web应用。


可行解决方案

方法1:自定义网络+--add-host映射localhost到PostgreSQL容器

这种方法既保留端口映射功能,又能让webapp容器内的localhost指向postgres容器:

  1. 创建自定义Docker网络:
docker network create webapp-network
  1. 重新启动PostgreSQL容器并加入该网络:
docker run  \
--name webapp_postgres \
-e POSTGRES_PASSWORD='abc123'  \
-e POSTGRES_DB="webapp"  \
-p 5432:5432  \
--network webapp-network \
-d postgres
  1. 启动webapp容器时,加入同一网络,并通过--add-host将localhost映射到postgres容器的名称(自定义网络中容器名可直接解析为对应IP):
docker run \
--name webapp \
-p 8080:8443 \
--network webapp-network \
--add-host localhost:webapp_postgres \
appname/webapp

原理:--add-host会在webapp容器的/etc/hosts文件中添加一条记录,将localhost指向webapp_postgres容器的IP。这样应用访问localhost:5432时,实际会连接到postgres容器,同时web应用的端口映射8080:8443仍正常生效。


方法2:调整host模式的访问方式(可选)

如果选择使用--net host模式,容器会共享宿主机的网络栈,此时不需要端口映射,直接通过宿主机的8443端口访问web应用即可:

  1. 确保postgres容器已启动(保留原端口映射-p5432:5432)。

  2. 启动webapp容器:

docker run \
--name webapp \
--net host \
appname/webapp

此时web应用可通过http://<宿主机IP>:8443访问,同时容器内的localhost指向宿主机,能直接访问宿主机映射的5432端口(即postgres容器)。但这种方法需要调整web应用的访问端口,适合能接受端口变更的场景。


内容的提问来源于stack exchange,提问作者9 Guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:32:08