Docker 在 WSL 上设置用于推送 ACI 容器

Docker setup on WSL for pushing ACI containers

我在 linux 的 windows 子系统上使用 docker,并且 运行 正在解决将容器推向 Azure 的问题。在 WSL 上,似乎有不止一种方法可以 运行 docker,但都不能完全满足我的需要。

在这两种情况下,我都在 Windows 中安装了 Docker Desktop,并针对 WSL 使用进行了正确设置。

选项 1:使用 docker-ce 包。使用此选项,我可以在本地 运行 docker compose 并 运行 我的容器。但是,docker login azure 无法启动浏览器实例并希望连接到本地 url "//azure/v2/".

选项 2:删除 docker-ce 并使用 Docker Desktop 删除的符号链接。在这里我可以成功验证到 azure,并推送一个简单的容器,但是 docker compose up returns 这个消息:

ERROR: The platform targeted with the current context is not supported.
Make sure the context in use targets a Docker Engine.

此外,此选项阻止我在本地 运行ning 容器 - 没有 dockerd 运行ning 和 service docker start 说 dockerd不存在。

现在我已通过 Azure 进行身份验证,如果我在 ACI 上下文中重新安装 docker-ce 和 运行 docker compose up,我会看到一个新错误:

cannot use ACI volume, required driver is "azure_file", found ""

WSL 上 Docker 的推荐设置是什么,可以让我将容器推送到 ACI 并在本地启动它们?我应该采取什么步骤让系统进入干净状态?

What is the recommended setup for Docker on WSL that will enable me to push containers to ACI and also launch them locally? What steps should I take to get the system into a clean state?.

假设您使用的是 WSL(ubuntu 18.04 版本)。

请按照以下步骤安装 docker 并在本地创建容器并推送到 ACI。

第 1 步:在 Ubuntu 18.04

上安装 Docker
apt install docker.io

第 2 步:从 Docker Hub

拉取镜像

docker pull nginx.

第三步:制作本地容器并打开5000端口(默认端口为80)

docker container run -d --name nginx --publish 5000:80 nginx 

第 4 步:登录 azure

az login

第 5 步:创建容器注册表

az acr create -g "v-rasXXXXX" -n "TestMyAcr90" --sku Basic --admin-enabled true

第 6 步:标记 docker 图片

docker tag 605c77e624dd testmyacr90.azurecr.io/my_nginx

其中605c77e624dd是nginx的IMAGE ID

您可以使用 cmdlet docker images.

检查图像

第 7 步:现在使用 docker.

登录容器注册表
docker login testmyacr90.azurecr.io

步骤 8:将 docker 镜像推送到容器注册表

docker push testmyacr90.azurecr.io/my_nginx 

第 9 步:从 Container Registry 映像创建容器实例

az container create --resource-group v-rXXXXXdtree --name mycontainer90 --image testmyacr90.azurecr.io/my_nginx:latest --cpu 1 --memory 1 --registry-login-server testmyacr90.azurecr.io --registry-username TestMyAcr90 --registry-password CipBd5joXXXXXXfZrbw/Pl --dns-name-label testnginx5 --ports 80  

你可以参考这个我几个月前回答过的