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

[docker] docker pull が途中で止まる時は "max-concurrent-downloads 1" を試してみよう

概要

遅いインターネット回線で "docker pull" (docker build も同様)してたら途中で止まってしまった。タイムアウトなのか。遅い(重い)だけなのか。
Dockerの設定を変更して最大同時ダウンロード数(max-concurrent-downloads)を"1"にしたらうまくいった。

環境

Host OS: Windows 10 Home
- "Docker Toolbox" でDockerを利用

Docker: version 19.03.1

$ docker --version
Docker version 19.03.1, build 74b1e89e8a

背景

自宅PCでDockerを使っていたが、ある事情で家のインターネット回線を解約しました。
仕方なく、格安SIM(楽天モバイル)のテザリングでネットに繋いでいるので回線が重い。

すると、(今までそんなことなかったのに) docker build 等のコマンドでネットからファイル取得中に進まなくなる現象が多発するようになりました。

現象

例えば以下のような感じで、ファイルのダウンロード中で止まってしまう。

$ docker pull php:7.4-fpm-alpine
7.4-fpm-alpine: Pulling from library/php
aad63a933944: Downloading [==========================>                        ]   1.51MB/2.803MB
b61c449d5d91: Download complete
3fde16e1397a: Download complete
b1096698ab2a: Download complete
1b7b3153bac8: Download complete
c25256547bec: Download complete
47e7fc912cc2: Download complete
7ad4a4e5e343: Download complete
1739f6256835: Download complete
40c44c56af3f: Download complete

いくら待っても、これ以上進まない。
数回試したが、止まるファイルやどこまで進んだかが一定ではない。

解決策

色々調べると "Docker daemon" の起動時オプションで以下を追加するとうまくいきそう。

--max-concurrent-downloads 1

("max-concurrent-downloads" オプションについては https://docs.docker.com/engine/reference/commandline/dockerd/ 参照)

Docker toolbox を使っている場合は、以下の手順で変更できるようだ。

docker-machineに接続

$ docker-machine ssh default

profileファイル編集

[docker@default]
docker@default: sudo vi /var/lib/boot2docker/profile
  # EXTRA_ARGS に "--max-concurrent-downloads 1" を追加する
docker@default: cat /var/lib/boot2docker/profile

EXTRA_ARGS='
--label provider=virtualbox
--max-concurrent-downloads 1
'
CACERT=/var/lib/boot2docker/ca.pem
DOCKER_HOST='-H tcp://0.0.0.0:2376'
DOCKER_STORAGE=overlay2
DOCKER_TLS=auto
SERVERKEY=/var/lib/boot2docker/server-key.pem
SERVERCERT=/var/lib/boot2docker/server.pem

docker@default: exit

docker-machine再起動

docker-machine restart default

(https://github.com/boot2docker/boot2docker#docker-daemon-options 参照)

結果

上記設定変更作業すると以下のようになった。

  • pull するファイルが3並列だったのが直列になった。
  • 途中で止まらなくなった。

まとめ

ネット接続が重い状態で docker pull が止まる場合、並列ダウンロードをやめると改善する場合がある。

corydoraspanda
かれこれ20年以上エンジニアやってます
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