プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2022/01/20

WSL2 の Ubuntu で Docker を動かす

update2023/04/07 event_note2022/01/20 5:06

DockerDesktop が有償になったので、WSL2 の Ubuntu に Docker をインストールして動かすようにしてみました、

環境

  • Windows 10
  • Ubuntu 20.04

WSL2 および Ubuntu はインストール済みの前提です。
以下のページに書いてあるので、まだの場合は参考にしてください。

プロキシ設定

環境に応じてプロキシの設定を行っておきます。

.bashrc をエディタで開き、最後に以下を追記します。

export http_proxy=http://example.com:8080
export https_proxy=http://example.com:8080
export no_proxy=任意のIPアドレス

apt のプロキシ設定

/etc/apt/apt.conf を作成して以下のように記述します。

Acquire::http::proxy "http://example.com:8080/";
Acquire::https::proxy "https://example.com:8080/";

再起動します。

$ exit

Docker のインストール

公式ドキュメントに沿ってインストールします。

$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose

ユーザーを docker グループに追加

$ sudo gpasswd -a $(whoami) docker

これで docker コマンド実行時に sudo が不要になります。

docker のプロキシ設定

/etc/default/docker をエディタで開いて以下を追加します。

export http_proxy=http://example.com:8080
export https_proxy=http://example.com:8080

また、~/.docker/config.json に以下を記述します。

{
  "proxies": {
    "default": {
      "httpProxy": "http://example.com:8080",
      "httpsProxy": "http://example.com:8080"
    }
  }
}

再起動します。

$ exit

docker デーモンの起動

$ sudo service docker start

動作確認

$ docker info
$ docker run hello-world

すると、私の場合以下のエラーが表示されました。

docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.

docker デーモンが起動しているか確認します。

$ sudo service docker status
* Docker is not running

原因がわからず悩んでいたところ、以下の記事を見つけました。

私の場合、既に DockerDesktop はアンインストールしていました。
もともとは DockerDesktop と WSL2 を使って動かしていたのですが、今回 DockerDesktop なしで動くようにしようとしているところで、 DockerDesktop だけでなく WSL2 も一度アンインストールして最初からやり直すと上手く行きました。

docker デーモンの自動起動

このままでは WSL を起動する度に docker デーモンを手動で起動する必要がありますが、以下のページに自動起動させる方法があります。

まずは sudo service docker start をパスワードなしで実行できるように設定します。

$ sudo visudo

以下を追記します。

ユーザー名 ALL=(ALL:ALL) NOPASSWD: /usr/sbin/service docker start

あとは .bashrc に以下を追記します。

$ nano .bashrc
if [ $(service docker status | awk '{print $4}') = "not" ]; then
  sudo service docker start > /dev/null
fi

Windows と WSL2 のポートフォワーディングの設定

WSL2 上の Docker コンテナに外部からアクセスしたい場合、Windows と WSL2 のポートフォワーディングの設定が必要です。
詳細は以下の記事を参照してください。