首页 > 解决方案 > Visual Studio Docker 工具 - 图像在哪里以及容器在哪里运行

问题描述

在 Docker for Desktop 中,我选择了 docker-for-desktop 集群(它在 HyperV 上的 MobyLinuxVM 上运行)。

但是,当我转到 Visual Studio 并构建/调试具有 Docker 支持的项目,然后从命令行运行“docker ps -a”时,我没有看到创建了另一个容器。默认情况下,Visual Studio 是否会以某种方式将容器部署到单独的集群?

标签: dockerdocker-containerdocker-for-windows

解决方案


我将 docker-compose 项目设置为启动项目(不知道为什么还没有)。此外,我在努力理解它为什么没有运行时导致的 docker-compose.yml 格式存在问题。

请注意,如果您不指定网络,docker-compose 将自动创建一个桥接网络,docker-compose 中的所有服务都将共享该网络(它们必须使用此网络的网关才能查看其他容器上的服务)。在构建过程中,它通常会增加桥接网络网关 IP 的第二个八位字节。我不得不不断更改网关 IP 的解决方法是创建一个用户定义的桥接网络,并将以下内容添加到 docker-compose.yml 的底部(文件中的所有服务都使用它):

networks:
  default:
    external:
      name: mybridgenetwork

另一个有用的事情是我能够将多个环境变量传递给 docker-compose.yml 中的单个服务,如下所示:

services:
   myservice1:
      "envVariable1" : "somevalue"
      "envVariable2" : "somevalue"

此外,我能够从本地 docker 注册表中提取它(如果在 Docker Desktop 上启用了 Kubernetes,那么您可以通过右键单击 Docker 图标,转到 kubernetes 子菜单来设置 docker-compose 将运行的上下文,然后选择上下文。如果您没有看到 docker-desktop 上下文,请从 powershell 或命令(以管理员身份运行)发出“docker swarm init”命令。然后,将以下内容添加到 docker-compose.yml 的图像行中以获取 docker compose 以检测本地 Docker for Windows 注册表中的构建图像:

image: ${DOCKER_REGISTRY}TheImageNameYouWant

请注意,容器名称将被称为 dockercompose[一些随机字符串]_[上面的图像名称]。您可以通过执行“docker ps -a”在 powershell(以管理员身份)中查看这些正在运行的容器。

最后一件事 - 确保 Visual Studio / 工具 / 选项 / 容器工具已选中“解决方案关闭时自动终止容器”。如果您认为您可能想在 docker-compose.yml 在启动时第一次运行之前对其进行更改,请取消选中前两个复选框。


推荐阅读