Jenkins JDK 11中安装了Docker引擎的Dockerfile-无法连接到Docker守护进程



我创建了一个基于jenkins/jenkins:lts-jdk11的Dockerfile

我正在尝试安装docker+docker-compose,这样当我为CD/CI创建管道时,jenkins就可以访问它。

这是我的Dockerfile:

FROM jenkins/jenkins:lts-jdk11 AS jenkins
WORKDIR /home/jenkins
RUN chown -R 1000:1000 /var/jenkins_home
USER root
# Install aws cli version 2
RUN apt-get update && apt-get install -y unzip curl vim bash sudo
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip
RUN ./aws/install
#Install docker cli command
RUN sudo apt-get update
RUN sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian 
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
RUN sudo apt-get update
RUN sudo apt-get install -y docker-ce docker-ce-cli containerd.io
##Install docker compose
RUN mkdir -p /usr/local/lib/docker/cli-plugins
RUN curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
RUN chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
RUN sudo usermod -a -G docker jenkins

docker命令在容器中运行良好,但一旦我开始构建图像,它就会显示以下错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

如果我尝试用service docker start启动docker服务,我会得到以下错误:

mkdir: cannot create directory ‘cpuset’: Read-only file system

我不知道如何解决这个问题。

TIA-

我在尝试使用ECS Fargate在Jenkins容器内运行docker时遇到了同样的问题。

TLDR:Fargate不支持特权容器。所以您需要切换到EC2才能运行docker。

我使用了以下设置:

FROM jenkins/jenkins:lts-jdk11
USER root
# Install Docker and Docker Compose
RUN apt-get update
RUN apt-get install -y apt-transport-https 
ca-certificates 
curl 
gnupg-agent 
software-properties-common && 
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - && 
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
RUN apt-get update && 
apt-get install -y docker-ce docker-ce-cli containerd.io && 
curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose && 
chmod +x /usr/local/bin/docker-compose
# Install necessary plugins for Jenkins
RUN jenkins-plugin-cli --plugins 
docker-workflow 
blueocean 
pipeline-utility-steps 
cloudbees-folder
# Setup Debian to use the legacy iptables instead of nftables
RUN  update-alternatives --set iptables /usr/sbin/iptables-legacy && 
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
# Expose ports for Jenkins
EXPOSE 8080

应使用以下命令启动集装箱:

docker run --privileged -p 8080:8080 -v jenkins_home:/var/jenkins_home myjenkins 

在运行任何docker命令之前,请使用service docker start命令启动docker。

容器不使用init系统。因此无法启动Docker服务。

最新更新