-
環境
- Windows 10 PRO 19030.1
- WSL2 Ubuntu-18.04
- docker on WSL2
docker --version
Docker version 18.09.7, build 2d0083d
現象
- docker image build時にネットワークがおかしくなることがある
Dockerfile
FROM php:7.4-cli-alpine
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
RUN composer global require hirak/prestissimo
- この短いdockerfileのビルドで、ネットワーク周りで3箇所くらい躓きました
結論: dockerdの設定で解決
- /etc/init.d/docker
...
# This is the pid file created/managed by start-stop-daemon
DOCKER_SSD_PIDFILE=/var/run/$BASE-ssd.pid
DOCKER_LOGFILE=/var/log/$BASE.log
- DOCKER_OPTS=
+ DOCKER_OPTS="--dns 8.8.8.8"
DOCKER_DESC="Docker"
...
詳細
- 問題おきまくり
composerのinstallerが降ってこない
- 再掲
FROM php:7.4-cli-alpine
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
RUN composer global require hirak/prestissimo
docker image build .
- インストーラが永久に降ってこない
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM php:7.4-cli-alpine
---> 3d0ba8511fe4
Step 2/3 : RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
---> Running in 36b888336848
- curlをverboseにしてみる
FROM php:7.4-cli-alpine
- RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
+ RUN curl -vsS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
RUN composer global require hirak/prestissimo
docker image build .
- IPv6で死んでそう
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM php:7.4-cli-alpine
---> 3d0ba8511fe4
Step 2/3 : RUN curl -vsS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
---> Running in a535056fcb6d
* Trying 205.251.192.250:443...
* TCP_NODELAY set
* Trying 2600:9000:5300:fa00::1:443...
* TCP_NODELAY set
* Immediate connect fail for 2600:9000:5300:fa00::1: Address not available
* Trying 2600:9000:5303:dd00::1:443...
* TCP_NODELAY set
* Immediate connect fail for 2600:9000:5303:dd00::1: Address not available
...
composer.pharが降ってこない
- v4に固定したら一応installerは降ってきたっぽい
FROM php:7.4-cli-alpine
- RUN curl -vsS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
+ RUN curl -sS4 https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
RUN composer global require hirak/prestissimo
- が、今度はcomposer.pharが降ってこない
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM php:7.4-cli-alpine
---> 3d0ba8511fe4
Step 2/3 : RUN curl -sS4 https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
---> Running in acae50461534
All settings correct for using Composer
Downloading...
Downloading...
はcomposer installerの出力- 永久にこのまま
composerライブラリが降ってこない
- composerをinstallerで入れることを諦める
- composerは単一の実行ファイルなんだから、multistage-buildにして、composerコンテナイメージから引っこ抜いてくればいいじゃない
FROM php:7.4-cli-alpine
- RUN curl -sS4 https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
+ COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
RUN composer global require hirak/prestissimo
docker image .
- 結局ライブラリが降ってこない
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM php:7.4-cli-alpine
---> 3d0ba8511fe4
Step 2/3 : COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
---> 031f6f2a43f1
Step 3/3 : RUN composer global require hirak/prestissimo
---> Running in ffa5cf38498a
Changed current directory to /root/.composer
Do not run Composer as root/super user! See https://getcomposer.org/root for details
The "http://repo.packagist.org/p/provider-2013%24d43bc94601a2eb4a005d86fcc58809e63661238903da0f3b7c5155a294dd9b7f.json" file could not be downloaded: failed to open stream: Operation timed out
Retrying with degraded mode, check https://getcomposer.org/doc/articles/troubleshooting.md#degraded-mode for more info
[Composer\Downloader\TransportException]
The "http://repo.packagist.org/p/provider-2013%24d43bc94601a2eb4a005d86fcc58809e63661238903da0f3b7c5155a294dd9b7f.json" file could not be downloaded: php_network_getaddresses: getaddrinfo failed: Name does not resolve
failed to open stream: php_network_getaddresses: getaddrinfo failed: Name does not resolve
require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-suggest] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--update-with-all-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--] [<packages>]...
The command '/bin/sh -c composer global require hirak/prestissimo' returned a non-zero code: 1
解決
- dockerdの—dnsオプションで解決
- 再掲
/etc/init.d/docker でdockerdの起動オプションを設定できる
...
# This is the pid file created/managed by start-stop-daemon
DOCKER_SSD_PIDFILE=/var/run/$BASE-ssd.pid
DOCKER_LOGFILE=/var/log/$BASE.log
- DOCKER_OPTS=
+ DOCKER_OPTS="--dns 8.8.8.8"
DOCKER_DESC="Docker"
...
- dockerd再起動
sudo service docker restart
service docker status
* Stopping Docker: docker
...done.
* Starting Docker: docker
...done.
* Docker is running
- 再度、当初のdockerfileをビルドしてみる
FROM php:7.4-cli-alpine
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
RUN composer global require hirak/prestissimo
docker image build .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM php:7.4-cli-alpine
---> 3d0ba8511fe4
Step 2/3 : RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
---> Running in 6819a66cbf5b
All settings correct for using Composer
Downloading...
Composer (version 1.9.1) successfully installed to: /usr/bin/composer
Use it: php /usr/bin/composer
Removing intermediate container 6819a66cbf5b
---> ce23bdb76548
Step 3/3 : RUN composer global require hirak/prestissimo
---> Running in 90201e9c39ea
Changed current directory to /root/.composer
Using version ^0.3.9 for hirak/prestissimo
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing hirak/prestissimo (0.3.9): DownlDownloadiDownlDownloading (100%)
Writing lock file
Generating autoload files
Removing intermediate container 90201e9c39ea
---> 2db7289c8521
Successfully built 2db7289c8521
- やったー!
所感
- ネットワークは必修科目
- 雰囲気で使っていると足元を掬われる