内部ネットワークの他のマシンからDockerコンテナにアクセスする

内部ネットワークの他のマシンからDockerコンテナにアクセスする

Dockerを使用してラズベリーパイでasp.netコアアプリケーションを実行しようとしていますが、主な部分を完了したようです。単純なasp.netコアプロジェクトであるgithubにリポジトリがあります。私のgithubリポジトリにプッシュするたびに設定されているdockerクラウドにアカウントが設定されています。

dockerが私のリポジトリを私のpiにインポートするようにしました。 piのドッカー画像のスクリーンショット

次のコマンドを実行すると、 docker run -d -p 8080:80 joro550/radiusnet --network=host 実行されていることがわかります。 Docker イメージ実行イメージ

ただし、ポート 8080 でパイの IP アドレスにアクセスすると、次の結果が表示されます。 接続が拒否されましたスクリーンショット

私がこれを探していたとき、人々は次のフラグを追加することを提案しました(私は同じ結果で試しました:

  • docker run コマンドに --network=host を追加する
  • docker runコマンドに-itを追加する
  • DockerファイルにExpose 80を追加する

今、私はこれに近づく方法を少し失ったようです。 Dockerドキュメントでは実行をお勧めします。

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

Windows 10 Nanoコンテナを使用している場合は使用しているとは思えませんが、このコマンドを実行すると大きな音がします。<no value>

再切り替えすると、docker inspect -f "{{ .NetworkSettings.IPAddress }}" myapp私のIP内部IPアドレスとは異なるIPアドレスが提供されます。ポート8080で試しましたが、同じ結果が得られました。

両方のアドレスをカリングすると、同じ接続拒否結果が表示されます。 IPアドレスでCurlが失敗する

興味のある人のための私のドッカーファイルは次のとおりです。

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ポート」によって報告されますが、提供される保証はありません。

# 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 ホスト」で始まると、「docker ポート」は 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’

すべてがうまくいき、すべてがうまくいきます。

おすすめ記事