從內部網路中的另一台機器訪問 Docker 容器
我正在嘗試使用 docker 從樹莓派執行 asp.net 核心應用程序,我想我的主要部分已經關閉。我在 github 上有一個儲存庫,它是一個簡單的 asp.net 核心項目。我在 docker cloud 上設置了一個帳戶,每次我推送到我的 github 儲存庫時都會建構該帳戶。
我執行命令:
docker run -d -p 8080:80 joro550/radiusnet --network=host
我可以看到它正在執行:但是當我在埠 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 給了我相同的連接被拒絕的結果:
這是我的 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’
一切都很好,就一切都好。