Boot2docker 1.3.1で実行しています。
uwsgi --http :8080
経由でWebサーバーを実行するDockerコンテナーがあります。
コンテナに接続すると、lynx http://127.0.0.1:8080
を使用してWebサイトを閲覧できるため、サーバーが機能していることがわかります。
コンテナを次のように実行しました:
$ docker run -itP --expose 8080 uwsgi_app:0.2
次の詳細があります。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5248ad86596d uwsgi_app:0.2 "bash" 11 minutes ago Up 11 minutes 0.0.0.0:49159->8080/tcp cocky_hypatia
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' 5248ad86596d
172.17.0.107
http://172.17.0.107:49159
にアクセスして、ホストからそのWebサイトにアクセスできると思いました。
これは動作しません。 Chromeに「接続しています...」と表示され、どこにも行きません。
私は何を間違えていますか?
わかりました、私は愚かな、私はboot2dockerのドキュメントで答えを見つけました https://docs.docker.com/installation/mac/#container-port-redirection
コンテナのIPではなく、boot2docker vmのIPアドレスを使用する必要がありました。
$ boot2docker ip
192.168.59.103
http://192.168.59.103:49159/
のホストからサイトを閲覧できます
ホストにroute
を追加する必要はありませんでした
拡張 Anentropic'sanswer :boot2docker
はMacおよびWindows用の古いアプリで、docker-machine
は新しいアプリです。
まず、マシンをリストします。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
default * virtualbox Running tcp://192.168.99.100:2376
次に、いずれかのマシン(デフォルトのマシンはdefault
と呼ばれます)を選択します。
$ docker-machine ip default
192.168.99.100
コンテナのIPアドレスを見つけるには、追加インストールなしが必要です。
docker inspect <container>
これは豊富な情報を提供します。 grep
それはIPアドレスです。
here で説明されているように、boot2dockerポートマッピングオプション-Lを使用できます。
だから、あなたの場合は
boot2docker ssh -L 0.0.0.0:8080:localhost:8080
その後
docker run -it -p 8080:8080 uwsgi_app:0.2
そうすれば、boot2dockerのIPアドレスを使用する必要はありません。localhostまたは独自のIPアドレスを使用できます(また、Dockerコンテナには外部からアクセスできます)。
同じ問題があり、私の場合はAWS EC2インスタンスを使用していました。コンテナIPを試してみましたが、うまくいきませんでした。次に、AWSホストの実際のパブリックIPをIPとして使用しましたが、機能しました。
Boot2dockerは時代遅れですが、同じコンテナがLinuxでも動作する場合でも、WindowsまたはMacのDockerでこの問題が発生する可能性があります。 1つの症状は、コンテナ内のサーバーのページにアクセスしようとすると、「接続できませんでした」ではなく、「データを送信しませんでした」というエラーが表示されることです。
その場合、Win/Macでは コンテナホストは独自のIPを持っています であり、Linuxのようにローカルホストではない可能性があります。 IP 0.0.0.0でDjangoを実行してみてください。つまり、次のように、すべてのIPからの接続を受け入れます。
python manage.py runserver 0.0.0.0:8000
または、サーバーがローカルリクエスト(nginx、Apache、gunicornなどのローカルプロキシなど)にのみ応答するようにする必要がある場合は、hostname -i
によって返されるホストIPを使用できます。
そして、-p
コマンドでdocker run
ポート転送オプション を正しく使用していることを確認してください。
すべてが正常であると仮定すると、ホストマシンで実行されているブラウザで http:// localhost でサーバーにアクセスできるはずです。
[編集:元のバージョンは問題の-Pを無視していました]
ポートを「公開」せずにコンテナにアクセスしたい場合(番号を変更する場合)、適切なランスルー here があります。
重要なのは次の行です。
Sudo route -n add 172.17.0.0/16 172.16.0.11
これは、DockerコンテナがオンになっているVirtualBox VM内のプライベートネットワークにルーティングする方法をMacに指示します。
ローカルホストブラウザーでホストアプリケーションの問題をトラブルシューティングする方法
この場合、以下のコマンドでコンテナを起動します。私の場合は次のとおりです。
[root@centoslab3 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1b81d8a0e3e1 centos:baseweb "/bin/bash" 8 minutes ago Exited (0) 24 seconds ago webtest
[root@centoslab3 ~]# docker run --name=atul -v /root/dockertest:/var/www/html -i -t -p 5000:8000 centos:baseweb /bin/bash
Httpd構成:
[root@adb28b08c9ed /]# cd /etc/httpd/conf
[root@adb28b08c9ed conf]# ll
total 52
-rw-r--r--. 1 root root 34419 Sep 19 15:16 httpd.conf
リスナでポート8000を使用してファイルを編集し、サーバー名の下のコンテナIPとポートを更新します。
Httpdサービスを再起動すると完了です。
お役に立てれば