【问题标题】:How to connect a Dev Container to another Container?如何将 Dev Container 连接到另一个 Container?
【发布时间】:2022-08-24 22:13:42
【问题描述】:

对于这个问题,我正在使用 prisma 的开发容器:https://github.com/prisma/prisma/tree/main/.devcontainer

一旦我使用 Visual Studio 中的远程容器插件在容器内打开该 repo 并运行一些依赖于 https://github.com/prisma/prisma/tree/main/docker 文件夹中定义的 docker 服务的 Jest 测试,我会收到“无法连接到数据库”的错误。数据库...

这就像如果开发容器不知道这些服务存在......在我的电脑上,看着 docker 桌面我看到服务启动并运行但 devcontainer 不能......为什么?

我发现我不得不更改任何类型的设置很奇怪,因为这些文件来自 prisma repo,一旦下载它们就应该准备好采取行动......对吗?

  • 您如何指定要连接的数据库主机?通常,在使用非 docker 设置时,您将使用 localhost,在使用 docker 设置时,您需要将其更改为数据库容器的名称。
  • 你在使用他们提供的 docker compose 文件吗?
  • 这是 devcontainer 文件:github.com/prisma/prisma/blob/main/.devcontainer/… Visual Studio Remote 插件会选择它并在容器内打开整个项目。这很好用。在此之前,我去了 prisma\ 源文件夹的本地副本并手动 docker-compose up 这个github.com/prisma/prisma/blob/main/docker/docker-compose.yml 再次工作正常,我可以看到我的机器上运行的所有数据库服务......但是当我尝试运行测试,在 Visual Studio 包含的项目中,我收到错误“无法连接到 XXXX”

标签: docker docker-compose dockerfile vscode-devcontainer devcontainer


【解决方案1】:

假设 docker 网络驱动程序是网桥(默认)。

如果脚本正在运行 line 以在您的 devcontainer 中获取 env,如下所示。

const connectionString = (
    process.env.TEST_MYSQL_URI_MIGRATE || 'mysql://root:root@localhost:3306/tests-migrate'
  ).replace('tests-migrate', 'tests-migrate-dev')
`

连接字符串中的 localhost 表示您的 devcontainer 中的 localhost,但不是您的主机。

您应该改为访问主机的 localhost。

修复是设置TEST_MYSQL_URI_MIGRATE 环境变量,而不是像

TEST_MYSQL_URI_MIGRATE=mysql://root:root@host.docker.internal:3306/tests-migrate

有关如何访问主机本地主机的详细信息,请阅读此question

【讨论】:

    猜你喜欢
    • 2020-07-19
    • 2021-12-07
    • 1970-01-01
    • 2022-11-07
    • 2022-12-06
    • 2019-10-23
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多