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

DockerをProxy環境下&root権限なしでUbuntuに導入する (RootlessのDockerにProxy設定がメイン)

前書き

  • 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の設定に継承される形で適用される...多分)
これがRootlessモードの時にどう設定するかわからないという状況で2日かかりました。

解法

結論としては、~/.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も生成されていた為、冷静に見れはもう少し早くわかったなと反省。

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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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