1

我正在使用 Docker Desktop 在 Windows 上工作。

我构建了一个具有此 Dockerfile 的 Docker 容器:

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y \
    default-jre \
    default-jdk \
    && rm -rf /var/lib/apt/lists/*
COPY ./src/ /srcMicroservizio
RUN cd /srcMicroservizio && javac -cp .:BouncyCastle1.jar:BouncyCastle2.jar:byteLib.jar:clientMqtt.jar:gson-2.8.6.jar:sqlite-jdbc-3.27.2.1.jar ./analisiDati/* ./db/* ./oggetti/*
EXPOSE 3001
CMD cd /srcMicroservizio && java -cp .:BouncyCastle1.jar:BouncyCastle2.jar:byteLib.jar:clientMqtt.jar:gson-2.8.6.jar:sqlite-jdbc-3.27.2.1.jar analisiDati/AnalisiDati

然后我使用以下命令启动它:

docker build -t analisidati-pissir . && docker run -p 3001:3001/tcp --net=host --name analisidati-pissir-container -it analisidati-pissir

在微服务的 Java 代码中,我在端口 3001 上创建了一个服务器:

HttpServer server = HttpServer.create(new InetSocketAddress(3001), 0);

但是当我尝试使用以下方式联系服务器时:

curl -i "localhost:3001"

我收到以下错误:

curl: (7) Failed to connect to localhost port 3001: Connection refused

为什么 Windows 无法联系容器?

我尝试在 Ubuntu 20.04 虚拟机上使用该容器,它工作正常。

此外,如果我使用 Eclipse 而不是容器运行微服务的代码,它可以工作。

这是 Docker 的桥接问题吗?

有没有办法解决它?

4

1 回答 1

1

参数--network=host(or --net=host) 仅在 Linux 上受支持。不幸的是,当您在 Windows 下使用该参数时,Docker 并没有报错,但是您会收到“连接被拒绝”的错误消息。

作为测试,我使用了以下命令:

  • docker run --rm -p 80:80 nginx这样我就可以连接到 localhost:80
  • docker run --rm -p 80:80 --network=host nginx尝试访问 localhost:8080 时,使用给了我“连接被拒绝”错误消息
于 2021-08-19T12:22:08.053 回答