从内部网络中的另一台机器访问 Docker 容器

从内部网络中的另一台机器访问 Docker 容器

我正在尝试使用 docker 从树莓派运行 asp.net core 应用程序,我想我已经完成了主要部分。我在 github 上有一个存储库,它是一个简单的 asp.net core 项目。我在 docker 云上设置了一个帐户,每次推送到我的 github 存储库时都会建立该帐户。

我让 docker 将我的存储库拉到我的 pi 上: pi 上的 docker 镜像的屏幕截图

我运行命令: 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 上尝试过并得到相同的结果

对两个地址进行卷曲会得到相同的连接被拒绝的结果: 卷曲在 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

任何帮助 - 此时将不胜感激

答案1

首先有几点说明

  • 在 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’

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

相关内容