错误无法连接到 CircleCi 中的 Ryuk

Posted

技术标签:

【中文标题】错误无法连接到 CircleCi 中的 Ryuk【英文标题】:Error Can not connect to Ryuk in CircleCi 【发布时间】:2019-08-22 00:13:16 【问题描述】:

有config for CircleCI。 在本地机器上,当你运行 CircleCI 时,一切都会过去。在这种情况下,服务器很多of mistakes,其中一个是

java.lang.IllegalStateException: Can not connect to Ryuk

同时将来在test-containers 之前启动的容器中连接测试时出错,我认为这是由于连接到Ryuk 时出错。混淆了在本地机器上一切正常而在服务器上一切都失败的事实。

【问题讨论】:

【参考方案1】:

问题原因在这里:https://gist.github.com/OlegGorj/52ca84624503a5e85624c6eb38df4590 它说: 环境分离作业和远程docker在不同的环境中运行。因此,Docker 容器无法直接与远程 docker 中运行的容器进行通信。

访问服务在远程 docker 中启动服务并直接从主容器 ping 它是不可能的(反之亦然)。

似乎有三个选项:

    在另一个远程 docker 容器中进行整个构建。 使用专用 VM 进行构建 (https://www.testcontainers.org/supported_docker_environment/continuous_integration/circle_ci/) 如果您可以一开始就创建测试容器,那么就这样做并且不要在 circleci (https://circleci.com/docs/2.0/executor-types/#using-multiple-docker-images) 中使用测试容器。请记住,每个测试用例都将与同一个服务实例进行交互。

关于选项 3 的更多详细信息

基本上,使用circleci时不要使用testcontainers(一个词)。 在你的 circleci/config.yaml 中做这样的事情:

    jobs:
      build:
          docker:        
            - image: circleci/openjdk:14.0.1-jdk-buster
            - image: rabbitmq:3.8-alpine
          environment:

所以 circleci 在与您的图像相同的主机上运行 rabbit 容器。 然后,您可以在它打开的任何端口上在 localhost 上与它通信,并且当您的构建(始终在第一个容器中)完成时,circleci 将关闭这些辅助容器。

这样做有一些缺点:

testcontainers 允许您启动和停止容器,但这种方法不能,因此您根本无法测试容器的重启。 您的所有测试都将使用同一个实例运行,因此,在 rabbit 实例中,每个测试都应使用唯一的交换和队列。 如果像我一样,您需要在 circleci 和桌面(以及 Jenkins)中构建,那么您需要在测试中使用 circleci 条件逻辑(只需检查 System.getenv("CIRCLECI"))以确定哪个采取的方法。

【讨论】:

当您说“在开始时创建测试容器......并且不要在 circleci 中使用测试容器”时,您是什么意思以及如何实现? 编辑了我的答案以提供更多详细信息。【参考方案2】:

我遇到了同样的错误,通过关闭 Docker 中的 Experimental Features 来修复它。

您可以在首选项中找到它们。

【讨论】:

以上是关于错误无法连接到 CircleCi 中的 Ryuk的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.IllegalStateException:无法在 localhost:49167 连接到 Ryuk

如何连接到 CircleCI 上的原生 Selenium

测试容器无法拉取 ryuk 镜像:无法访问 quay.io

Docker:尝试使用本地 CircleCI 构建连接到 Docker 守护程序时权限被拒绝

当我将 root 密码设置为“无密码”时,我无法连接到数据库

phpMyAdmin 中的错误“无法连接到 MySQL 服务器”[重复]