web-dev-qa-db-ja.com

Dockerコンテナーにマップされたポートを参照しようとすると「ERR_CONNECTION_REFUSED」を取得する

私はDockerイメージをプルしました:

$ docker pull ghost

そして、イメージからコンテナを実行します。

$ docker run --name test-ghost -p 8080:2368 -d ghost
7d984e974f6a75fe18b3d397b5c8f0a428928a2be9df83f0d61a679aa5f537fc

私の理解は、-pスイッチは、ホスト(8080)上のポートをDocker(2368)内のポートにマップするため、Dockerの外部から、つまりホストから、Docker内で実行されているWebサーバーにアクセスできます。

しかし、私のホストからChromeで次のアドレスのいずれかを参照しようとすると、

http://localhost:8080/
http://0.0.0.0:8080/
http://127.0.0.1:8080/

次のエラーが発生します。

This webpage is not available

ERR_CONNECTION_REFUSED

これは、コンテナー内の問題ではなく、接続の問題である可能性があります。コンテナー内で実行中のプロセスを検査すると、NodeJSが実行されているようです。

$ docker top test-ghost
UID          PID           PPID      ...  CMD
docker       4290          1028      ...  npm
docker       4324          4290      ...  sh -c node index
docker       4325          4324      ...  node index

しかし、何もポート8080でリッスンしていないようです:

$ Sudo lsof -n -i4TCP:8080 | grep LISTEN
$

私もチェックし、MacOSファイアウォールがオフになっています。


私が提供した情報が最小限であることを認識しているため、ここでは完全な解決策を期待していません。

私が不思議に思っているのは、そのような問題をどのように修正するのですか?

Dockerポートにアクセスできないようです。

ポートマッピングが機能しない理由を見つける方法はありますか?または、どのポートある Dockerによって公開されていますか?おそらく、間違った内部ポートをマッピングしていますか?

または、私がここで間違っている可能性があることに関して他の一般的な提案はありますか?

7
jonathanconway

最後に、これを機能させる方法を見つけました!

MacOSでDockerを実行していて、「Docker QuickStart Terminal」を使用しています。

結局、「localhost」、「127.0.0.1」などに移動するのは間違っていました。Dockerが独自のホストを設定しているように見えるためです。

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/


docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

上記の192.168.99.100を使用すると、すべてが正常に動作します。

8
jonathanconway

実行中のコンテナのIPアドレスを確認するには、次を使用できます。

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myContainerID
1
Paulo Merson

docker-machineでdockerを実行する場合は、次のコマンドを使用してIPアドレスを取得します(defaultが自分の名前であると想定)。

docker-machine ip default

参照: https://docs.docker.com/machine/reference/ip/

0
Datageek

Dockerで遊んだところ、これが最初に遭遇した問題/問題です。

Docker like likeでは、ホスト、ブリッジ(デフォルト)などのさまざまなモードでポートを使用しているかどうかを指定できます

ブリッジモードでは、ゴーストをデプロイするとDockerからメッセージが表示されます-ブログは http:// localhost:2368 / で利用できるようになりましたが、このURLにアクセスすると接続が拒否されました。

これを修正するには、Kitematicでインスタンス設定にアクセスする必要があります(コンソールを使用する方が簡単です)。ホスト名/ポートタブに移動します。画像に示すように、Dockerポートからホストポートとビンゴへのマッピングを作成します。もう一度URLにアクセスすると、すべてが期待どおりに機能します。

Kitematicインスタンス設定ポート

0
Gautam