gpt4 book ai didi

docker - Windows Server 2016 上的容器到容器访问 Windows 容器问题

转载 作者:行者123 更新时间:2023-12-02 09:28:48 25 4
gpt4 key购买 nike

我想运行到同一网络中的容器:

docker-compose.yml:

    version: '2.1'

services:

web:
build:
context: ./src/web
dockerfile: web.Dockerfile
image: somethingWeb
container_name: smt-web
mem_limit: 2G
restart: on-failure
depends_on:
- db

db:
build:
context: ./src/db
dockerfile: db.Dockerfile
image: somethingDB
container_name: smt-db
ports:
- ${EXPOSED_SQLSERVER_PORT?err}:1433
environment:
sa_password: "Lfdc82zo!"
ACCEPT_EULA: "Y"

但是没有从网络到数据库的 ping:

    PS C:\> ping db

Pinging db [172.24.248.112] with 32 bytes of data:
Request timed out.
Request timed out.

Ping statistics for 172.24.248.112:
Packets: Sent = 2, Received = 0, Lost = 2 (100% loss),

我在 vmware ESXI 作为主机上运行 Windows Server 2016。容器也是Windows Server 2016镜像。

有什么建议可以解决我的容器到容器隔离问题吗?

根据this microsoft's article对于 NAT 网络,我向 Windows Server 2016 添加了 Hyper-V 功能 (from this),并且启用了 Hyper-V。

这些是我的 Docker 网络:

λ docker network ls
NETWORK ID NAME DRIVER SCOPE
bb82f97a3679 mehdi_default nat local
ee22d8faad51 nat nat local
0e05aee3cc5f none null local

最佳答案

Windows 2016 有自己的 Docker NAT,这是一个 PITA,因为您必须公开端口,并且每个容器都有自己的内部 IP。这对我来说是一个问题,因为我无法让容器直接相互通信。这是一个简单的 Nuget 服务器,暴露了 1 个端口,但由于恕我直言,Server 2016 的 Docker NAT 损坏,我无法将该容器作为服务运行。

我发现 Microsoft 在 2016 年之后修复/更改了任何较新版本的 Windows Server 上的 docker 支持,允许 Docker 的网络像在 OSX/Linux 上一样运行。因此,运行容器并公开端口使用服务器 IP,而不是一些随机 NAT IP。

您可以尝试使用 Windows Server 1803 或更高版本,或者 Windows Server 2019 吗?您可以使用 dockerspect 来查找正在运行的容器端口/IP。这在 2016 年尝试跨容器通信时很有帮助,因为您使用的是确切的网络地址:端口,由于 Docker 的 MS NAT 可能需要该端口。我在 2016 年的解决方法是使用 MS NAT 服务通过 NAT 规则将外部流量路由到容器,该规则真正将流量传递到 Docker 容器。如果服务器重新启动,就会出现问题,因为容器获得了新的 IP,需要更新 MS 服务器 NAT 服务端点 IP,但它有效。这一切都可以编写脚本,但我觉得已经使用 MS NAT 服务与运行服务的容器进行通信是很糟糕的。所以我到了 2019 年,不再需要任何 NAT hacky 的东西了。

关于docker - Windows Server 2016 上的容器到容器访问 Windows 容器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57607554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com