【发布时间】:2017-09-18 18:09:22
【问题描述】:
我有两个不同的 Docker 容器,每个容器都有不同的镜像。容器中的每个应用程序都使用不冲突的端口。见docker-compose.yml:
version: "2"
services:
service_a:
container_name: service_a.dev
image: service_a.dev
ports:
- "6473:6473"
- "6474:6474"
- "1812:1812"
depends_on:
- postgres
volumes:
- ../configs/service_a/var/conf:/opt/services/service_a/var/conf
postgres:
container_name: postgres.dev
hostname: postgres.dev
image: postgres:9.6
ports:
- "5432:5432"
volumes:
- ../configs/postgres/scripts:/docker-entrypoint-initdb.d/
我可以从主机(Mac OS)成功地卷曲每个图像,例如curl -k https://localhost:6473/service_a/api/version 有效。我想做的是能够从service_a容器通过localhost引用postgres容器,就好像这两个容器是一个容器并且它们共享相同的localhost .我知道如果我在service_a 容器内使用主机名postgres.dev 是可能的,但我希望能够使用localhost。这可能吗?请注意,我不太精通网络或 Docker。
Mac 版本:10.12.4
Docker 版本:Docker 版本 17.03.0-ce,build 60ccb22
我之前已经做了很多研究,但找不到解决方案。 相关:https://forums.docker.com/t/localhost-and-docker-compose-networking-issue/23100/2
【问题讨论】:
-
有几种(不同程度的 hackiness)方法,但你为什么要这样做?
-
我再说一遍,你为什么要这样做?与
localhost混淆只会造成混乱。在同一个容器中运行这两个进程可以实现相同的效果,而无需 hackiness。 -
我的用例是这样的:出于某些安全目的,这两个服务必须部署在同一主机上,因此现实世界中的
service_a将被配置为仅监听localhost/127.0.0.1。理想情况下,我会创建一个同时具有 postgres 和 service_a 的 Docker 映像,但这似乎不可行,因此我的方法在这里。
标签: docker