質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

4573閲覧

DockerからホストOSへの通信

pigton

総合スコア47

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2018/10/04 04:24

編集2018/10/04 04:49

前提・実現したいこと

[開発環境]
Ubuntu: 18.04 LTS
Python: 3.6.6
Django: 2.1
MySQL: 5.7

[実行環境]
Docker: 18.06.1-ce

DockerからホストOSに接続したいです。

Dockerで動かしているDjangoプロジェクトから、ホストOSのMySQLに接続したいのですが、
その前に、DockerからホストOSへの接続が上手く行きません。

解決法のご教示よろしくお願い致します。

ホストIP:172.17.0.1
DockerIP:172.17.0.2

どちらも8000番ポートを使用しております。

発生している問題・エラーメッセージ

DockerからホストOSへアクセスすると・・・

root@63e19d771435:~/mysite2/mysite2# curl http://172.17.0.1:8000 curl: (52) Empty reply from server

試したこと①

netstatコマンドで、ホストOSの8000ポートがLISTENになっていることを確認。

$ netstat -antu 稼働中のインターネット接続 (サーバと確立) Proto  受信-Q  送信-Q  内部アドレス 外部アドレス 状態 tcp6   0 0  :::8000 :::* LISTEN

試したこと②

curl アクセスの詳細を確認。

root@63e19d771435:~/mysite2/mysite2# curl -v http://172.17.0.1:8000 * Rebuilt URL to: http://172.17.0.1:8000/ * Trying 172.17.0.1... * TCP_NODELAY set * Connected to 172.17.0.1 (172.17.0.1) port 8000 (#0) > GET / HTTP/1.1 > Host: 172.17.0.1:8000 > User-Agent: curl/7.58.0 > Accept: */* > * Empty reply from server * Connection #0 to host 172.17.0.1 left intact curl: (52) Empty reply from server

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

127.0.0.1 ですと、コンテナ自身を指してしまうため、ローカルIP(例: 192.168.11.30)で指定するべきではないでしょうか

以下確認した方法

1. ホストOS側でサーバーを起動する。

bash

1$ python3 -m http.server 9999

2. コンテナ側で HOST OS に立てたサーバーにアクセス

$ python3 >>> import requests >>> requests.get('http://<ローカルIP>:9999') <Response [200]>

ローカルIP は固定したほうがよいでしょう。

投稿2018/10/04 05:22

編集2018/10/04 05:22
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pigton

2018/10/04 05:44

回答ありがとうございます! 172.17.0.1 がホストのローカルIPであるという認識なのですが違うのでしょうか? 127.0.0.1というアドレスは使っていないつもりです・・・。
tiitoi

2018/10/04 05:59

すいません。見間違えました。 HOST --> コンテナであれば、-p オプションのポートフォーワード設定が必要ですが、コンテナ --> HOST であれば、特に設定はいらないはずです。 HOST PCには、ローカルネットワーク内の他のPCからはそのIPでアクセスできるのでしょうか?
pigton

2018/10/04 06:21

すいません・・・。せっかく回答頂いたのにも関わらず、ホストPCごと再起動したら、 うまく接続できました。 回答ありがとうございました!
guest

0

自己解決

ホストPCごと再起動したら、何故かDockerからホストPCのMySQLにアクセスできるようになりました。

投稿2018/10/04 06:23

pigton

総合スコア47

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問