はじめに
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を利用します。
-
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
Learn about the ways you can install .NET on Ubuntu, either from the built-in package feed, the .NET ...
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.
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のインストール
-
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で動作させる方法は様々な所で紹介されているので、エラーで詰まったりしたい場合などはググれば出てくると思います(投げやり