Sas*_*ota 6 javascript node.js docker aws-codebuild testcontainers
我有一个 Node.js 项目,其中包含Testcontainers,用于启动 Redis 和 Prostgress 进行测试。
我想将这些测试作为 CI 的一部分来运行。为此,我使用 Node.js 的 alpine 镜像,并在其上安装了 Docker。我可以运行不需要 Docker 的测试,但如果涉及 Docker,我会从 Testcontainers 收到此错误:
未找到 Docker 客户端策略
这是我在日志中得到的内容:
2022-05-25T13:09:11.494Z testcontainers DEBUG Found applicable Docker client strategy: UnixSocketStrategy
2022-05-25T13:09:11.531Z testcontainers DEBUG Testing Docker client strategy URI: unix:///var/run/docker.sock
2022-05-25T13:09:11.539Z testcontainers DEBUG No registry auth locator found for registry: "https://index.docker.io/v1/"
2022-05-25T13:09:11.543Z testcontainers WARN Docker daemon is not reachable: Error: connect ENOENT /var/run/docker.sock
2022-05-25T13:09:11.543Z testcontainers WARN Docker client strategy UnixSocketStrategy is not reachable
2022-05-25T13:09:11.544Z testcontainers ERROR Failed to list images: Error: No Docker client strategy found
2022-05-25T13:09:11.544Z testcontainers ERROR Failed to pull image "postgres:14.2-alpine": Error: No Docker client strategy found
Run Code Online (Sandbox Code Playgroud)
当我在本地启动测试时,测试运行良好。
我在 CodeBuild 文档中没有找到任何解释从构建器容器内部连接到 Docker 引擎的内容。我在 Testcontainers 文档中找到了这些说明,但我不明白如何在 AWS Codebuild 中应用这些说明。
问:如何在 AWS CodeBuild 中运行需要启动 Docker 的测试?
警告 Docker 守护进程无法访问:错误:连接 ENOENT /var/run/docker.sock
默认情况下的 CodeBuild 环境:
dockerd该错误通过指出它无法到达守护程序来暗示这一点。
为了解决上述问题:
privilegedMode设置为true,以授予对守护进程的访问权限这里需要注意的关键点是,当使用 AWS CodeBuild 提供的官方 Docker 镜像时,Docker 守护进程会通过dockerd-entrypoint.sh. 您不需要手动执行此操作。
然而,当使用自定义镜像时,您必须手动启动守护进程。
您可以在构建的安装阶段通过将以下命令添加到 buildspec.yml文件中来手动初始化 Docker 守护程序。
对于基于 Alpine 的图像:
version: 0.2
phases:
install:
commands:
- nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2 &
- timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"
...
Run Code Online (Sandbox Code Playgroud)
对于基于 Ubuntu 的映像:
version: 0.2
phases:
install:
commands:
- nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2 &
- timeout 15 sh -c "until docker info; do echo .; sleep 1; done"
...
Run Code Online (Sandbox Code Playgroud)
您现在应该能够在构建中运行 Docker 容器。
如果还是不行,那就和Testcontainers有关了。
根据您链接的文档,确保docker run ...运行容器的命令包含-v $PWD:$PWD -w $PWD -v /var/run/docker.sock:/var/run/docker.sock.
| 归档时间: |
|
| 查看次数: |
1823 次 |
| 最近记录: |