我有一个使用测试容器进行集成测试的java项目。我想在那个阶段实现gitlab ci,但是我有这个错误
java.lang.IllegalStateException: Could not find a valid Docker environment. Please see logs and check configuration
该项目成功地建立在本地机器上,但gitlap码头无法启动。
这里有一个日志输出
[0KRunning with gitlab-runner 14.3.0 (b37d3da9)[0;m
[0K on Backend Docker runner 9L3Zko1w[0;m
section_start:1657698628:prepare_executor
[0K[0K[36;1mPreparing the "docker" executor[0;m[0;m
[0KUsing Docker executor with image maven:3.6.0-jdk-11-slim ...[0;m
[0KStarting service docker:dind ...[0;m
[0KPulling docker image docker:dind ...[0;m
[0KUsing docker image sha256:232342342342 for docker:dind with digest docker@sha256:2342342342 ...[0;m
[0KWaiting for services to be up and running...[0;m
[0;33m*** WARNING:[0;m Service runner-23423423-docker-0 probably didn't start properly.
Health check error:
service "runner-234234234-docker-0-wait-for-service" timeout
Health check container logs:
Service container logs:
2022-07-13T07:50:40.800780292Z ip: can't find device 'ip_tables'
2022-07-13T07:50:40.801898214Z ip_tables 32768 2 iptable_filter,iptable_nat
2022-07-13T07:50:40.802546323Z x_tables 45056 5 xt_conntrack,xt_MASQUERADE,xt_addrtype,iptable_filter,ip_tables
2022-07-13T07:50:40.802609399Z modprobe: can't change directory to '/lib/modules': No such file or directory
2022-07-13T07:50:40.806461330Z mount: permission denied (are you root?)
2022-07-13T07:50:40.807019652Z Could not mount /sys/kernel/security.
2022-07-13T07:50:40.807028026Z AppArmor detection and --privileged mode might break.
2022-07-13T07:50:40.807931221Z mount: permission denied (are you root?)
这是gitlab ci yaml
services:
- name: docker:dind
# explicitly disable tls to avoid docker startup interruption
command: ["--tls=false"]
variables:
# Instruct Testcontainers to use the daemon of DinD.
DOCKER_HOST: "tcp://docker:2375"
# Instruct Docker not to start over TLS.
DOCKER_TLS_CERTDIR: ""
# Improve performance with overlayfs.
DOCKER_DRIVER: overlay2
test:
image: maven:3.8.6-jdk-11-slim
stage: ⚙️ maven-build
before_script:
- docker info
- cp $MAVEN_SETTINGS_XML ~/.m2/settings.xml
script:
- mvn $MAVEN_CLI_OPTS clean verify
发布于 2022-07-12 18:51:33
仅仅使用maven:3.8.6-jdk-11-slim
图像是不够的。您还需要在映像中安装docker
。获得码头的一个非常简单的方法就是在管道中手动安装它:
before_script:
- curl -fsSL https://get.docker.com -o get-docker.sh
- bash ./get-docker.sh
- docker info
但是,如果您在自定义的码头映像中安装了对接器,这样您就不会在每个管道运行中不断地安装码头,这样做会好得多。您可以使用这个dockerfile来完成这个任务:
FROM maven:3.8.6-jdk-11-slim
RUN curl -fsSL https://get.docker.com -o get-docker.sh
RUN bash ./get-docker.sh
然后,生成的映像可以上传到注册表中,而无需每次安装maven:3.8.6-jdk-11-slim
即可使用。
https://stackoverflow.com/questions/72868752
复制相似问题