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 によって公開されていますか? おそらく間違った内部ポートをマッピングしているのでしょうか?
あるいは、私がここで間違っている可能性のあることに関して、他の一般的な提案はありますか?
答え1
ついにこれを機能させる方法が分かりました!
私は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
、すべて正常に動作します。
答え2
実行中のコンテナの IP アドレスを確認するには、次のコマンドを使用します。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myContainerID
答え3
docker を実行する場合は、docker-machine
次のコマンドを使用して IP アドレスを取得します (default
自分の名前であると想定します)。
docker-machine ip default
見る:参考:
答え4
docker を使い始めましたが、これが最初に遭遇した問題です。
docker では、ホスト、ブリッジ (デフォルト) などのさまざまなモードでポートを使用するかどうかを指定できるようです。
ブリッジモードでは、ゴーストをデプロイするとDockerにメッセージが表示されます - ブログが利用可能になりましたhttp://localhost:2368/しかし、この URL にアクセスすると接続が拒否されたことが示されます。
これを修正するには、kitematic のインスタンス設定にアクセスする必要があります (コンソールを使用するよりも簡単です)。ホスト名 / ポート タブに移動します。画像に示すように、docker ポートからホスト ポートへのマッピングを作成すれば完了です。URL に再度アクセスすると、すべてが期待どおりに動作します。