/var/run/docker.sock:connect:权限被拒绝的ECS集群上的Jenkins slave

时间:2019-03-21 15:30:27

标签: docker jenkins jenkins-pipeline amazon-ecs

我正在使用AWS EC2插件进行Jenkins生成任务时生成Jenkins从属。尝试在Docker容器中构建Docker时遇到权限问题。我查看了许多其他帖子,人们经常提供此作为答案:

  1. 创建docker组
  2. 将jenkins用户添加到docker组
  3. 重新启动
  4. 一切神奇地运作

问题是我无法重新启动,因为jenkins奴隶是使用该插件生成的,而且我不确定如何正确地重新启动它,以便它在重新启动时能够正确处理构建。同样,这意味着即使在容器中,也要在主机上运行重新启动,这听起来像是个坏主意。

我尝试过:

  1. 在dockerfile RUN adduser jenkins sudo中的sudo用户中添加jenkins,后跟RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers

  2. 更改docker套接字文件所有者RUN chown root:jenkins /var/run/docker.sock

  3. 更改docker套接字权限chmod 777 /var/run/docker.sock

  4. 使用newgrp,因此我不必从容器外部重新启动Docker

基本上,如何避免不重新启动docker服务,同时还提供sudo权限以便在jenkins从属容器中构建dockerfile?或者,如果我仍然可以在仍使用EC2插件的情况下重新启动,该怎么办?

当前dockerfile:

FROM jenkins/jnlp-slave

USER root

RUN apt-get update && \
    apt-get -y install apt-transport-https \
        ca-certificates \
        curl \
        gnupg2 \
        software-properties-common && \
    curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
    add-apt-repository \
      "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
      $(lsb_release -cs) \
      stable" && \
    apt-get update && \
    apt-get -y install docker-ce && \
    apt-get -y install sudo

VOLUME /var/run/docker.sock

RUN adduser jenkins sudo

RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers

RUN usermod -aG docker jenkins

RUN chmod 777 /var/run/docker.sock

RUN chown root:jenkins /var/run/docker.sock

USER jenkins

谢谢!

1 个答案:

答案 0 :(得分:0)

我也遇到了这个问题,我必须按照以下步骤进行操作:

  1. 更新docker文件以安装docker-client。
  2. 更新ECS Cloud Jenkins配置以进行卷挂载,即/var/run/docker.sock
  3. 最重要的部分是在容器内运行docker命令。有两种选择:

    i。以root用户身份运行containerUser。   如果您以root用户身份运行容器,这是最方便的步骤

    ii。将jenkins用户添加到主机上的docker组中

    usermod -a -G docker jenkins

    获取docker组的gid并将其映射到容器内。将docker容器的gid更新为主机的gid。这样,您就不会出现permission denied错误,也不需要做chown 777 /var/run/docker.sock