Azure

WSLではaz acr loginが使えないけど無理やり使う方法はDockerをsystemdで起動します。

はじめに

Azure Container Registryにアクセスしたい場合には、az loginaz acr login --name <レジストリ名> という流れを踏みます。

しかしWindows版Dockerは入れないことを信条としているため、WSLでDockerを起動して利用しています。WSLでDockerが動作するのは周知の事実ですが色々と制限があります。

その一つにaz acr loginが行えない問題があります。

# az acr login --name demohaproxy
You may want to use 'az acr login -n demohaproxy --expose-token' to get an access token, which does not require Docker to be installed.
An error occurred: DOCKER_COMMAND_ERROR
Please verify if Docker client is installed and running

 

このようなエラーが出ます。
Docker 自体は動いているんですけどね・・・

さて、解決方法は一応あります。

dockerをsystemdで動作させます。

やり方については下記を参考してください。

systemdを動作させるには,NETを利用します。

GitHub - arkane-systems/genie: A quick way into a systemd "bottle" for WSL
GitHub - arkane-systems/genie: A quick way into a systemd "bottle" for WSL

A quick way into a systemd "bottle" for WSL. Contribute to arkane-systems/genie development by creat ...

github.com

インストール

最初に、WSLのUbuntuに.NETをインストールします。

Ubuntu20.04の場合は.NET5を利用するのが無難かと思います。

.NET5

.NET and Ubuntu overview - .NET | Microsoft Learn
.NET and Ubuntu overview - .NET | Microsoft Learn

Demonstrates the various ways to install .NET SDK and .NET Runtime on Ubuntu.

docs.microsoft.com

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

 

sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y aspnetcore-runtime-5.0

 

wsl-transdebian

wsl-transdebianを追加します。一部、権限の問題が発生するようでcat コマンドをteeに変更しています。

wsl-transdebian | A repository for WSL-only apt packages.
wsl-transdebian | A repository for WSL-only apt packages.

A repository for WSL-only apt packages.

arkane-systems.github.io

sudo wget -O /etc/apt/trusted.gpg.d/wsl-transdebian.gpg https://arkane-systems.github.io/wsl-transdebian/apt/wsl-transdebian.gpg

sudo chmod a+r /etc/apt/trusted.gpg.d/wsl-transdebian.gpg

sudo tee << EOF > /etc/apt/sources.list.d/wsl-transdebian.list
deb https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
deb-src https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
EOF

sudo apt update

genie

最後にgenieをインストールします。

sudo apt install -y systemd-genie

起動

genie -s

genie -c bash
で起動できますが後者の方が色々と問題が起きにくそうです。

初回は起動できません。タイムアウトまで待ちます。

起動できなかったサービスが表示されるのでそれぞれsystemctl disableします。

Waiting for systemd....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Timed out waiting for systemd to enter running state.
This may indicate a systemd configuration error.
Attempting to continue.
Failed units will now be displayed (systemctl list-units --failed):
  UNIT                       LOAD   ACTIVE SUB    DESCRIPTION
● systemd-remount-fs.service loaded failed failed Remount Root and Kernel File Systems
● multipathd.socket          loaded failed failed multipathd control socket

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

2 loaded units listed.

失敗します。
下記を実行して起動しないものは省きます。

sudo systemctl disable systemd-remount-fs.service
sudo systemctl disable multipathd.socket

Azure CLIとDockerのインストール

あとは両者をインストールします。

Install Docker Engine on Ubuntu | Docker Docs
Install Docker Engine on Ubuntu | Docker Docs

Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prer ...

docs.docker.com

 

確認

az login の後にACRにもログインできることを確認します。

# az acr login --name <レジストリ名>
Login Succeeded

あとはdocker pullなりpushなり行ってください。

まとめ

今回はDockerの問題がaz acr login に影響する問題を取り上げ解決する方法を説明しました。genieを利用してsystemdで動作させる方法は様々な所で紹介されているので、エラーで詰まったりしたい場合などはググれば出てくると思います(投げやり

-Azure
-,