Докер: не найден после монтирования /var/run/docker.sock - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь использовать команду docker внутри контейнера. я использую эту команду для монтирования /var/run/docker.sock и запуска контейнера

docker run -d --name gitlab-runner --restart always \                                                                  
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  gitlab/gitlab-runner:latest

но когда я пытаюсь использовать докер внутри контейнера (gitlab-runner), я получаю ошибку

docker: not found

хозяин:

srw-rw----  1 root docker    0 Mar 23 15:13 docker.sock

контейнер:

0 srw-rw---- 1 root gitlab-runner    0 Mar 23 15:13 docker.sock

это работало нормально, прежде чем я удалил старый контейнер и создал новый, и теперь я не могу запустить докер внутри контейнера. Пожалуйста, помогите.

1 Ответ

4 голосов
/ 23 марта 2019

Вы должны различать Docker Daemon и Docker CLI. Первый - это сервис, который фактически выполняет всю работу - создает и запускает контейнеры. Второй - исполняемый файл, используемый для отправки команд демону .

Исполняемый файл (интерфейс командной строки Docker) является легковесным и использует /var/run/docker.sock для доступа к демону (по умолчанию фактически существуют разные транспорты).

Когда вы запускаете свой контейнер с -v /var/run/docker.sock:/var/run/docker.sock, вы на самом деле делитесь демоном вашего хоста для docker CLI в контейнере. Таким образом, вам все еще нужно установить CLI Docker внутри контейнера, чтобы использовать Docker, но вам не нужно настраивать демон внутри (что довольно сложно и требует привилегированного режима).

Заключение

Установите док-интерфейс CLI внутри контейнера, поделитесь сокетом и наслаждайтесь. Но при использовании узла docker хоста вы, вероятно, будете путать с подключаемыми томами монтирования, поскольку демон не видит внутреннюю файловую систему контейнера.

...