20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

機内のようなオフライン環境でDockerコンテナ内とローカル通信する際にレスポンスが遅い件

Last updated at Posted at 2016-08-30

#背景
先日、海外出張の際に気がついたことをまとめます。飛行機の中で時間があったので、少しだけ開発を進めようかと思って、docker内のウェブアプリケーションにアクセスすると、異常にレスポンスが遅いことに気が付きました。

##環境

  • MacBook (Retina, 12-inch, Early 2015)
  • OS X 10.11.6
  • Docker for Mac OS X (Version 1.12.0-a (build: 11213))
  • こちらのDockerfileを使用

##再現方法

  • Docker内でWebrick等でWebサーバを起動
  • ホスト側からcurl http://localhost:9292 等でアクセスして、HTTPコマンドを叩く
  • レスポンスが返るまで40秒ほど掛かる

##原因
どうやらDockerがポートフォワーディングする際に、内部的に何処かの外部サーバへアクセスしているように思われる。ホストはオフラインのため、外部サーバへのアクセスに必要な名前解決がタイムアウトするのに40秒かかっていることが原因と思われる。
実際にコンテナ内で curl で適当な外部サーバ(例:google.com)へアクセスしようとすると

curl: (6) Could not resolve host: google.com

というエラーがきっかり40秒で返ってくる。

##回避方法
docker runコマンドのオプションにコンテナ内のDNSを指定するオプションがあるので、オフラインの際には 0.0.0.0 を指定することで、すぐに名前解決がタイムアウトするようになる。

docker run --dns 0.0.0.0

Have a safe flight.

20
20
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?