Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

背景

先日、海外出張の際に気がついたことをまとめます。飛行機の中で時間があったので、少しだけ開発を進めようかと思って、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.

maloninc
IT部 はじめました。
http://maloninc.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away