はじめに
Azure Container Registryにアクセスしたい場合には、az login → az 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を利用します。
インストール
最初に、WSLのUbuntuに.NETをインストールします。
Ubuntu20.04の場合は.NET5を利用するのが無難かと思います。
.NET5
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に変更しています。
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のインストール
あとは両者をインストールします。
確認
az login の後にACRにもログインできることを確認します。
# az acr login --name <レジストリ名> Login Succeeded
あとはdocker pullなりpushなり行ってください。
まとめ
今回はDockerの問題がaz acr login に影響する問題を取り上げ解決する方法を説明しました。genieを利用してsystemdで動作させる方法は様々な所で紹介されているので、エラーで詰まったりしたい場合などはググれば出てくると思います(投げやり



