Tengo un proyecto Node.js con Testcontainers que se usan para mirar Redis y Prostgress para las pruebas.
Quiero ejecutar estas pruebas como parte de CI. Para ese propósito, uso una imagen alpina de Node.js con Docker instalado encima. Puedo ejecutar pruebas que no requieren Docker allí, pero si involucra a Docker, recibo este error de Testcontainers:
No se encontró ninguna estrategia de cliente de Docker
Esto es lo que obtengo en los registros:
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 foundLas pruebas funcionan bien cuando las inicio localmente.
No he encontrado nada en la documentación de CodeBuild que explique cómo conectarse a Docker Engine desde dentro de un contenedor de compilación. Encontré estas instrucciones en la documentación de Testcontainers, pero no entiendo cómo aplicar esto en AWS Codebuild.
P: ¿Cómo ejecutar pruebas que requieren iniciar Docker en AWS CodeBuild?
WARN Docker daemon no es accesible: Error: conecte ENOENT /var/run/docker.sock
Entornos de CodeBuild por defecto:
dockerdEl error insinúa esto al indicar que no puede llegar al demonio.
Para abordar lo anterior:
privilegedMode establecido en true para otorgar acceso al demonio El punto clave a tener en cuenta aquí es que cuando se utilizan imágenes oficiales de Docker proporcionadas por AWS CodeBuild, el demonio de Docker se inicia automáticamente a través de dockerd-entrypoint.sh . No necesita hacer esto manualmente.
Sin embargo, cuando utilice imágenes personalizadas, debe iniciar el daemon manualmente .
Puede inicializar manualmente el demonio Docker durante la fase de instalación de su compilación agregando los siguientes comandos a su archivo buildspec.yml .
Para una imagen basada en 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" ...Para una imagen basada en 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" ...Ahora debería poder ejecutar contenedores Docker dentro de su compilación.
Si eso sigue sin funcionar, estará relacionado con Testcontainers.
Según los documentos que ha vinculado, asegúrese de que su docker run ... el comando que ejecuta el contenedor incluye -v $PWD:$PWD -w $PWD -v /var/run/docker.sock:/var/run/docker.sock