【发布时间】:2022-01-06 13:55:43
【问题描述】:
我有 8 个前端应用程序,12 个后端服务器。前端是 Vue.js 或 AngularJS,后端是 ASP.NET Core 3.1,以及 SQL server 和 Redis 等服务
所有服务都是 Docker 容器的类似配置,除了日志记录、端口等。他们都在同一个命名的网络中工作mynetwork
abcservice:
image: ${DOCKER_REGISTRY-}abcservice
container_name: abcServer
hostname: abcservice
build:
context: .
dockerfile: abcService/Dockerfile
networks:
- mynetwork
但我必须使用http://host.docker.internal:{portnumer},所以所有容器都可以很好地协同工作。如何强制所有应用在 http://localhost:{portnumer} 上协同工作?
假设一个简单的 ASP.NET 核心应用程序,如果启动它没有docker,它可以访问SQL Server(run in docker) 和Redis(run in docker) 域http://localhost:port,但如果启动它一次docker,我必须通过域http://host.docker.internal:port访问应用程序,否则无法访问SQL和Redis。因为在容器内部,localhost 表示容器本身,我需要一些配置来让容器通过 localhost 和指定端口到达其他容器。
欣赏。
【问题讨论】:
-
你读过Networking in Compose这样的背景资料吗?在容器之间,您应该能够使用 Compose 服务名称,如
abcservice作为主机名;您不需要container_name:、hostname:或networks:设置。 (而且,是的,“在非 Docker 开发人员环境中”和“在 Compose 内部”是不同的环境,对于“Redis 在哪里”等问题需要不同的设置。) -
@DavidMaze 是不是意味着有了 docker,就不能再使用
localhost来跨所有服务器了? -
即使没有 Docker,很多时候你的数据存储和依赖服务也不是
localhost;例如,如果您的 Redis 实际上是 AWS Elasticache,则它不是localhost。至少使用 Docker,您可以确定另一个容器 不是localhost.
标签: docker docker-compose dockerfile localhost host-docker-internal