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

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

新規登録して質問してみよう
ただいま回答率
85.48%
さくらのクラウド

さくらのクラウドは、さくらインターネット株式会社が提供するIaaS型のクラウドサービス。仮想化技術による柔軟性のあるカスタマイズを始め、様々な高機能を備えています。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

Q&A

解決済

1回答

11340閲覧

Docker内部からホストマシンへのcurlが届かない

RyuSA

総合スコア131

さくらのクラウド

さくらのクラウドは、さくらインターネット株式会社が提供するIaaS型のクラウドサービス。仮想化技術による柔軟性のあるカスタマイズを始め、様々な高機能を備えています。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

0グッド

1クリップ

投稿2018/12/26 14:28

前提・実現したいこと

Dockerコンテナ@さくらVPS
=> curl (さくらVPSのIP):(ポートフォワーディングしているポート)

がエラーになってしまっているので、正常なレスポンスにしたい。
必要な情報があれば教えてください、追記いたします。

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

[前提]
さくらVPSのIPアドレス

  • xxx.xxx.xxx.xxx

Docker内部から

bash

1curl http://xxx.xxx.xxx.xxx:8000

を実行すると下記エラーが発生する。

curl: (7) Failed to connect to xxx.xxx.xxx.xxx port 8000: No route to host

このエラーが発生しないように設定を見直したい。

該当のソースコード

docker-compose.ymlは以下

yml

1version: "3" 2services: 3 wordpress: # このコンテナが問題 4 image: wordpress:latest 5 container_name: "my-wordpress" 6 volumes: 7 - "./.docker/html:/var/www/html" 8 - "./.docker/backup:/tmp/backup" 9 - "./.docker/log:/tmp/log" 10 ports: 11 - 8000:80 12 depends_on: 13 - db 14 environment: 15 WORDPRESS_DB_HOST: "db:3306" 16 env_file: .env 17 18 db: 19 image: mysql:5.7 20 container_name: "my-db" 21 volumes: 22 - "db-data:/var/lib/mysql" 23 env_file: .env 24 25volumes: 26 db-data:

起動コマンドは

docker-compose -d up

です。

試したこと

同じcurlコマンドを実行しました。

[Mac(自宅のPC)]
=> 正常なレスポンス

[さくらVPS(rootユーザー)]
=> 正常なレスポンス

また、Docker内から下記コマンドを実行したところ、正常なレスポンスが返ってきました

curl localhost:80

補足情報

さくらVPSのOS : CentOS7
Docker : 1.13.1
docker-compose : 1.18.0

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

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

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

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

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

t_obara

2018/12/27 02:18

自環境から、ホストを経由して自環境にアクセスする意図がわかりませんが、動作試験のためですか? 問題切り分けのため、ファイアウォールがホスト・Dockerで動作しているのであれば、外して確認すると良いです。
guest

回答1

0

ベストアンサー

Dockerホストからコンテナにポートフォワードすると、Dockerホストの iptables で DNAT が設定されます。
しかし、コンテナ内部から Dockerホストの DNAT 対象のポート(8080)へのアクセスは、除外されているようです。

(参考) Dockerホストが fedora 29 の場合のルール:

# iptables -t nat -nvL DOCKER Chain DOCKER (2 references) pkts bytes target prot opt in out source destination 0 0 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0 0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.17.0.2:80

コンテナ内部からのアクセスは、inbound インターフェースが docker0 なので、DNAT の前に RETURN されます。

なお、ここで DNAT されたとしても、いわゆる ヘアピンNAT となるため、うまく動かないのではないかと思います。

投稿2018/12/27 15:45

TaichiYanagiya

総合スコア12146

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

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

RyuSA

2018/12/30 08:39

ネットワーク側の問題でしたか…… 自分の環境でも確認してみましたが、同じ現象を確認できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問