NoneDocker -in-docker: как смонтировать bind /github/workspace в /foo?

Я столкнулся со странным ограничением при запуске docker внутри docker (для целей тестирования) в GitHub Actions.

(Я знаю, что я не должен запускать docker-in-docker (как parent-child), но запускаю docker-next-2-docker, и это то, что я делаю)

Я запускаю этот сценарий дважды; как только я привяжу крепление (mount bind?)/usr/localв/rootи один раз /github/workspace в /root, Как ни странно, первое работает, второе - нет.

Строительные блоки

Вот строительные блоки (также в этом репо готовы клонировать.

main.workflow

workflow "Run Docker in Docker" {
  on = "push",
  resolves = [
    "fails"
  ]
}

action "works" {
  uses = "./"
  env = {
    SOURCE_PATH = "/usr/local"
  }
}

action "fails" {
  uses = "./"
  env = {
    SOURCE_PATH = "/github/workspace"
  }
  needs = "works"
}

(несколько?), то же самое, вы можете запустить то же самое локально сgithub.sh:

#!/bin/sh

# this script replicates what github actions should do
docker build -t did .
echo "works"
docker run \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --env SOURCE_PATH="/usr/local" \
  did

echo "fails"
docker run \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --env SOURCE_PATH="/github/workspace" \
  did

(Я знаю, что я обманываю здесь, потому что я не могу точно знать, как GitHub раскручивает образы действий, независимо от того, с отображением объема или нет).

Dockerfile

FROM github/docker-cli:master

COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh

#!/bin/sh

echo "this is the outer container"
mkdir -p $SOURCE_PATH
echo $SOURCE_PATH
ls $SOURCE_PATH
echo "this is the inner container"
docker run \
  --mount type=bind,source=$SOURCE_PATH,destination=/root \
  --entrypoint "/bin/ls" \
  --tty \
  github/docker-cli:master \
  /root

Результаты

Первое действие, где я связываю маунт изSOURCE_PATH = "/usr/local"работает как при запуске внутри действий GitHub, так и локально (и через act!).

Внешний и внутренний контейнеры выглядят одинаково на соответствующей связкеsourceа такжеdestination,

works
this is the outer container
/usr/local
bin
lib
share
this is the inner container
bin    lib    share

Но когда я установилSOURCE_PATH = "/github/workpace"Я либо получаю (локально и через акт):

fails
this is the outer container
/github/workspace
this is the inner container
docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /github/workspace.

или на действиях GitHub:

this is the outer container
/github/workspace
Dockerfile
entrypoint.sh
foo
github.sh
this is the inner container

Это означает, чтоtargetна самом деле пусто, и некоторые странные вещи молча провалились.

Чтоособенного в/github/workspace?,

PS: Я делаю это, чтобы иметь возможность протестировать действие GitHub, источник которого, очевидно, живет в /github/workspaceотсюда и стычка.

0 ответов

Другие вопросы по тегам