Невозможно подключиться к docker.sock, когда он существует с разрешениями, работающими внутри контейнера Docker. - PullRequest
0 голосов
/ 31 октября 2018

Я настраиваю базовый образ, на котором установлена ​​и настроена докерская программа, поэтому при запуске конвейера jenkins можно выполнять сканирование на якорь. Я должен вытащить образ привязки внутри образа докера, потому что мой конвейер работает на агенте докера. Однако, даже работая локально, пытаясь создать образ Docker и просто запустить простой Docker-контейнер hello-world или выполнить Docker Pull, не удается подключиться к Docker-сокету. Я добавил пользователя root в группу Docker, я даже chmod 777 и + xX в docker.sock. По какой-то причине он находится как в /run/docker.sock, так и в /var/run/docker.sock, кажется, что это символическая ссылка. Я использую Ubuntu: 18.04-bionic для сборки и установки из репозитория Ubuntu. Образ Ubuntu не имеет установленного systemd, и когда я устанавливаю systemd, он говорит, что он не был запущен с загрузкой, что означает, что он должен быть установлен при загрузке, когда образ запускается. Я запускаю его при запуске службы Docker.

Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for dbus (1.12.2-1ubuntu1) ...
/usr/bin/docker
/usr/share/bash-completion/completions/docker
/etc/init.d/docker
/etc/default/docker
/etc/docker
 * Starting Docker: docker
   ...done.
/run/docker.sock
total 32K
drwxr-xr-x 1 root    root    4.0K Oct 31 17:49 .
drwxr-xr-x 1 root    root    4.0K Oct 31 17:49 ..
drwxr-xr-x 2 dnsmasq nogroup 4.0K Oct 31 17:49 dnsmasq
drwx------ 4 root    root    4.0K Oct 31 17:49 docker
-rw-r--r-- 1 root    root       6 Oct 31 17:49 docker-ssd.pid
srwxrwxrwx 1 root    docker     0 Oct 31 17:49 docker.sock
drwxrwxrwt 2 root    root    4.0K Oct 18 21:02 lock
drwxr-xr-x 2 root    root    4.0K Oct 18 21:02 mount
drwxr-xr-x 2 root    root    4.0K Oct 19 00:47 systemd
-rw-rw-r-- 1 root    utmp       0 Oct 18 21:02 utmp
total 32K
drwxr-xr-x 1 root    root    4.0K Oct 31 17:49 .
drwxr-xr-x 1 root    root    4.0K Oct 31 17:49 ..
drwxr-xr-x 2 dnsmasq nogroup 4.0K Oct 31 17:49 dnsmasq
drwx------ 4 root    root    4.0K Oct 31 17:49 docker
-rw-r--r-- 1 root    root       6 Oct 31 17:49 docker-ssd.pid
srwxrwxrwx 1 root    docker     0 Oct 31 17:49 docker.sock
drwxrwxrwt 2 root    root    4.0K Oct 18 21:02 lock
drwxr-xr-x 2 root    root    4.0K Oct 18 21:02 mount
drwxr-xr-x 2 root    root    4.0K Oct 19 00:47 systemd
-rw-rw-r-- 1 root    utmp       0 Oct 18 21:02 utmp
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

Мой Dockerfile

FROM ubuntu:bionic

#requirements
#docker
#kubectl
#terraform
#kops
#mysql
#systemd


ENV DEBIAN_FRONTEND=noninteractive \
    NVM_VERSION=0.33.11 \
    NODE_VERSION=9.11.1

RUN set -e && \
    echo "NODE_VERSION: $NODE_VERSION" && \
    apt-get update --yes && \
    apt-get install git \
                    gnupg \
                    wget \
                    curl \
                    apt-utils \
                    gcc \
                    g++ \
                    make \
                    build-essential \
                    nginx \
                    python \
                    vim \
                    gnupg \
                    gnupg2 \
                    net-tools \
                    software-properties-common \
                    npm \
                    curl \
                    libxss1 \
                    libappindicator1 \
                    libindicator7 \
                    apt-utils \
                    fonts-liberation \
                    xfonts-cyrillic \
                    xfonts-100dpi \
                    xfonts-75dpi \
                    xfonts-base \
                    xfonts-scalable \
                    libappindicator3-1 \
                    libasound2 \
                    libatk-bridge2.0-0 \
                    libgtk-3-0 \
                    libnspr4 \
                    libnss3 \
                    libx11-xcb1 \
                    libxtst6 \
                    xdg-utils \
                    lsb-release \
                    xvfb \
                    python-pip \
                    default-jre \
                    gtk2-engines-pixbuf -y && \
    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
    dpkg -i google-chrome*.deb && \
    NVM_DIR="$HOME/.nvm" && \
    PROFILE="$HOME/.profile" && \
    git clone --branch "v$NVM_VERSION" --depth 1 https://github.com/creationix/nvm.git "$NVM_DIR" && \
    echo >> "$PROFILE" && \
    echo 'export NVM_DIR="$HOME/.nvm"' >> "$PROFILE" && \
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm' >> "$PROFILE" && \
    echo '[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion" # This loads nvm bash_completion' >> "$PROFILE" && \
    . $NVM_DIR/nvm.sh && \
    nvm install $NODE_VERSION && \
    apt-get install npm --yes && \
    rm -rf /usr/lib/openssh/ssh-keysign && \
    mkdir -p /tmp/nginx && \
    pip install awscli && \
    wget https://github.com/kubernetes/kops/releases/download/1.10.0/kops-linux-amd64 && \
    wget https://storage.googleapis.com/kubernetes-release/release/v1.8.4/bin/linux/amd64/kubectl && \
    cp kops-linux-amd64 /usr/local/bin/kops && \
    cp kubectl /usr/local/bin/kubectl && \
    chmod a+xX /usr/local/bin/kubectl && \
    chmod a+xX /usr/local/bin/kops && \
    apt install docker.io -y && \
    find / -name 'docker' && \
    usermod -aG docker root && \
    service docker start && \
    find / -name 'docker.sock' && \
    chmod a+xX /run/docker.sock && \
    chmod 777 /run/docker.sock && \
    # this doens't work because it exists in var/run as well which doesn't make sense because its not there in the find command. ln -s /run/docker.sock /var/run/docker.sock && \
    ls -lah /run/ && \
    ls -lah /var/run/ && \
    docker run hello-world

RUN npm install --global lerna

EXPOSE 80

Перепробовал все, что мог придумать. Ищу идеи ...

1 Ответ

0 голосов
/ 31 октября 2018

Если вы просто пытаетесь получить доступ к демону Docker на хосте, вам не нужно (пытаться) запустить демон внутри контейнера; вам просто нужен совместимый /usr/bin/docker и использовать docker run -v для привязки и монтирования сокета Docker хоста в контейнер во время запуска.

Если вам нужно выполнить базовые операции Docker (docker pull, docker build, docker push), тогда обычный подход состоит в том, чтобы использовать демон Docker хоста, а не пытаться запустить свой собственный. Есть пара старых постов в блоге, которые советуют не запускать Docker внутри Docker; это теоретически возможно, но приводит к запутанным вопросам о том, «с каким Докером я разговариваю», а настройка в любом случае сложна.

(Все следующие утверждения верны примерно на 80%: вы не можете запустить фоновый демон в Dockerfile; вы не можете service или systemctl ничего внутри Docker когда-либо; вы не можете запустить Docker демон в контейнере Docker. Попытка обойти это обычно не лучшая практика.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...