Смонтировать папку, в которой запущен контейнер «докер в докере», в пользовательском действии GitHub

#docker #github-actions #mount

Вопрос:

Я запускаю контейнер «докер в докере» в своем действии на GitHub, и мне нужно смонтировать папку с хоста (репозитория).

действие.yml

 ...
runs:
  using: 'docker'
  image: 'Dockerfile'
...
 

Докерфайл

 FROM docker:stable
COPY entrypoint.sh /entrypoint.sh
RUN chmod  x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
 

entrypoint.sh

 ...
docker run -d ... -v /github/workspace/.github/config:/opt/dest/config ...
...
 

Файлы в папке действительно существуют в GITHUB_WORKSPACE из отладочной печати в entrypoint.sh. Но они, похоже, неправильно прикреплены к внутреннему контейнеру.

Комментарии:

1. Пожалуйста, посмотрите это, если это поможет — jpetazzo.github.io/2015/09/03/… Решение сокета, вероятно, должно решить вашу проблему. Вы также можете посмотреть на — -привилегированный флаг. Более подробную информацию об этом можно найти здесь — docker.com/blog/docker-can-now-run-within-docker

2. Попробовал установить разъем и флаг привилегий. Это не помогло.

Ответ №1:

При использовании официальной настройки dinder docker в ней есть два компонента: один контейнер с CLI Docker ( docker:latest ) и другой контейнер с демоном Docker ( docker:dind ). Контейнеры Docker-в-Docker создаются внутри последнего контейнера ( docker:dind ), так что это тот, на который вы должны настроить монтирование хоста. Я подозреваю, что вы, возможно, устанавливаете крепления в контейнер Docker CLI вместо этого.

Еще один совет: настройка докера в докере по умолчанию зависит от непривилегированных контейнеров или подключения сокета к докеру хоста; оба обеспечивают слабую изоляцию и могут испортить настройку хоста. Чтобы получить надлежащую изоляцию, загляните в Sysbox, новый runc, который позволит вам запускать Docker-в-Docker (и многое другое) гораздо более чисто.