簡體   English   中英

使用 Docker 容器 (Windows) 拒絕連接到本地主機

[英]Connection refused to localhost with Docker container (Windows)

我正在使用 Windows 和 Docker 桌面。

我構建了一個 Docker 容器,其中包含這個 Dockerfile:

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的橋接問題嗎?

有辦法解決嗎?

參數-.network=host (或-.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 時出現“連接被拒絕”錯誤消息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM