前書き
- root権限が無いからUbuntuの環境構築はかどらない!
- なんかroot権限が必要ないDockerがあるらしいぞ!
- 導入したがProxy設定わかんねー!
- あと記事書くの初めてなので優しくしてください
Root権限が必要ないRootlessモードのDocker
Docker19.03にて、root権限がなくても実行できるRootlessモードが実装されました1。
root権限を持たない身としてはありがたいお話です。
RootlessモードのDockerインストール
(インストールについては先人の方々の記事or公式ページ1を参考にしていただければ...)
# curlのproxy設定してない場合はcurlrcファイルにproxy設定を書き込む
vi ~/.curlrc
#以下を書き込む
proxy=http://proxy.url:port
# Rootless mode Dockerをlocal環境にインストール
$ curl -fsSL https://get.docker.com/rootless | sh
# インストーラ終了時に追加すべきPATHを指示してくれるため、指示されたコマンドを実行する
$ export PATH=/home/testuser:/bin:$PATH
$ export PATH=$PATH:/sbin
$ export DOCKER_HOST=unix:///run/user/1001/docker.sock
Hello Worldで動作確認
恐らくProxyが原因でTimeoutが発生
$ docker run docker/whalesay cowsay Hello World
$ systemctl --user start
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
Docker daemonにProxy設定
詰まった所
本来Docker daemonにproxy設定を行う際は
/etc/systemd/system/docker.service.d/http-proxy.conf
に設定を書く必要があります2。
(するとdocker.servicの設定に継承される形で適用される...多分)
解法
結論としては、~/.config/systemd/system/docker.service.d/http-proxy.conf
に設定することで解決しました。
$ mkdir -p ~/.config/systemd/system/docker.service.d
$ vi ~/.config/systemd/system/docker.service.d/http-proxy.conf
# 以下2行を書き込み
[Service]
Environment="HTTP_PROXY=http://proxy.url:port"
$ systemctl --user daemon-reload
$ systemctl --user restart docker
再度Hello World
$ docker run docker/whalesay cowsay Hello World
_____________
< Hello World >
-------------
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
反省
公式ページにdaemon configディレクトリのパス~/.config/docker
が記載されており3、
~/.config/systemd
も生成されていた為、冷静に見れはもう少し早くわかったなと反省。
-
https://docs.docker.com/config/daemon/systemd/#httphttps-proxy
これがRootlessモードの時にどう設定するかわからないという状況で2日かかりました。 ↩