概要
遅いインターネット回線で "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
が止まる場合、並列ダウンロードをやめると改善する場合がある。