Raspberry-Pi

從內部網路中的另一台機器訪問 Docker 容器

  • February 8, 2018

我正在嘗試使用 docker 從樹莓派執行 asp.net 核心應用程序,我想我的主要部分已經關閉。我在 github 上有一個儲存庫,它是一個簡單的 asp.net 核心項目。我在 docker cloud 上設置了一個帳戶,每次我推送到我的 github 儲存庫時都會建構該帳戶。

我有 docker 將我的儲存庫拉到我的 pi 上: docker 鏡像在 pi 上的截圖

我執行命令: docker run -d -p 8080:80 joro550/radiusnet --network=host 我可以看到它正在執行: 正在執行的 docker 鏡像

但是當我在埠 8080 上訪問我的 pi 的 IP 地址時,我得到了這個: 連接被拒絕螢幕截圖

當我一直在尋找這個人時,人們建議添加這些標誌(我已經嘗試過並得出相同的結果:

  • 將 –network=host 添加到 docker run 命令
  • 將 -it 添加到 docker run 命令
  • 將 Expose 80 添加到 docker 文件中

我認為在這一點上,我對如何訪問這個東西有點迷茫。docker 文件確實建議執行

`docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" myapp`

如果我使用的是 Windows 10 Nano 容器,我不相信我正在使用,但是當我執行這個命令時,我會得到一個響亮的<no value>

將其切回docker inspect -f "{{ .NetworkSettings.IPAddress }}" myapp給我一個與我的 ips 內部 IP 地址不同的 IP 地址,我在埠 8080 上嘗試過並得到相同的結果

在兩個地址上做一個 curl 給了我相同的連接被拒絕的結果: curl在IP地址上失敗

這是我的 docker 文件,供任何感興趣的人使用:

FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app

# copy csproj and restore as distinct layers
COPY /src ./
RUN dotnet restore

# copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out -r linux-arm

# build runtime image
FROM microsoft/dotnet:2.0.0-runtime-stretch-arm32v7
WORKDIR /app
COPY --from=build-env /app/src/RadiusNet.Web/out .
EXPOSE 80
ENTRYPOINT ["dotnet", "RadiusNet.Web.dll"]

如果需要更多資訊,請詢問,我對 Docker 很陌生,所以我只是對我目前的情況做了一些知識轉儲。

連結到 github 項目(如果需要):https ://github.com/joro550/RadiusNet

任何幫助 - 在這一點上將不勝感激

先說兩句

  • 在 Dockerfile 中,“EXPOSE 80”由“docker run -P”、“publish all”使用
  • 發布 docker 不服務的埠是沒有用的(例如,當服務在埠 5000 上執行時,“-p 8000:80”

監聽埠由“docker port”報告,但它們不保證它們會被服務。

# docker run --name radiusnet -p 8001-8009:5000/tcp  radiusnet
Hosting environment: Production
Content root path: /app
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

# docker port radiusnet
5000/tcp -> 0.0.0.0:8001

布丁的證明…

# wget -O /tmp/test.html  http://localhost:8001/
--2018-02-08 16:22:46--  http://localhost:8001/
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:8001... connected.
HTTP request sent, awaiting response... 

如果失敗,則發布了錯誤的埠。

當以“–network host”啟動時,“docker port”可能什麼都不報告,而 docker 服務很好。“lsof”可以提供幫助。

# docker run --name radiusnet --network host  radiusnet
Hosting environment: Production
Content root path: /app
Now listening on: http://localhost:5000

# docker port radiusnet 

# ps -ef | grep dotnet
root       540 27973  0 16:46 pts/2    00:00:00 grep dotnet
root     32452 32437  7 16:37 ?        00:00:43 dotnet RadiusNet.Web.dll

# lsof -Pn -p 32452 | grep LISTEN
dotnet  32452 root  368u     IPv4     106845      0t0    TCP 127.0.0.1:5000 (LISTEN)
dotnet  32452 root  383u     IPv6     106854      0t0    TCP [::1]:5000 (LISTEN)

# wget -O /tmp/test.html  http://localhost:5000/       
--2018-02-08 16:56:27--  http://localhost:5000/
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:5000... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘/tmp/test.html’

一切都很好,就一切都好。

引用自:https://unix.stackexchange.com/questions/422387