#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 (и многое другое) гораздо более чисто.