#docker #dockerfile #process-substitution #docker-buildkit #envsubst
#докер #докерфайл #процесс-замещение #докер-комплект для сборки #envsubst
Вопрос:
Я сталкиваюсь с проблемой всякий раз, когда пытаюсь создать свой образ Docker, используя сценарий-оболочку, который я создал, чтобы обеспечить возможность замены на месте переменными среды хоста.
Всякий раз, когда я выполняю свой сценарий, я получаю ошибку:
[ ] Building 0.1s (2/2) FINISHED =gt; [internal] load build definition from 63 0.1s =gt; =gt; transferring dockerfile: 47B 0.0s =gt; [internal] load .dockerignore 0.1s =gt; =gt; transferring context: 2B 0.0s failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount2556703017/pipe:[1080734]: no such file or directory Unable to find image 'my-image:latest' locally docker: Error response from daemon: pull access denied for gotk-st24-test, repository does not exist or may require 'docker login': denied: requested access to the resource is denied. See 'docker run --help'.
Вот сценарий обертки
#!/bin/env bash # Make sure you have the appropriate token in your ENV variables on a machine that you're running this script on. DOCKER_BUILDKIT=1 docker build --no-cache -f lt;(envsubst lt; ./Dockerfile) -t "my-image" . docker run -d -t my-image $1
А вот и Dockerfile
:
FROM fluxcd/fluxctl:1.24.3 as builder ARG ARCH=linux/amd64 ARG KUBECTL_VER=1.22.2 ARG GH_CLI_VER=2.2.0 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl -o /usr/local/bin/kubectl amp;amp; chmod x /usr/local/bin/kubectl RUN curl -sL https://github.com/cli/cli/releases/download/v${GH_CLI_VER}/gh_${GH_CLI_VER}_linux_amd64.tar.gz | tar xvz -C /tmp amp;amp; mv /tmp/gh_${GH_CLI_VER}_linux_amd64/bin/gh /usr/local/bin/ amp;amp; chmod x /usr/local/bin/gh amp;amp; rm -rf /tmp/gh_* FROM k8s.gcr.io/git-sync/git-sync:v3.3.5 as gitsync FROM alpine:3.14 as gtk-cli RUN apk update amp;amp; apk add coreutils git ENV GITHUB_TOKEN=$GITHUB_TOKEN COPY --from=builder --chmod=755 /usr/local/bin/kubectl /usr/local/bin/ COPY --from=builder --chmod=755 /usr/local/bin/fluxctl /usr/local/bin/ COPY --from=builder --chmod=755 /usr/local/bin/gh /usr/local/bin/ COPY --from=gitsync --chmod=755 /git-sync /usr/local/bin/ COPY --chmod=755 ./ssh-entrypoint.sh /ssh-entrypoint.sh COPY --chmod=755 ./docker-entrypoint.sh /docker-entrypoint.sh RUN kubectl version --client=true amp;amp; fluxctl version amp;amp; gh version WORKDIR / ENTRYPOINT [ "/docker-entrypoint.sh" ]
Я был бы очень признателен за некоторую помощь здесь.
Заранее всем вам спасибо!
Комментарии:
1. Какие конкретные вещи вы пытаетесь заменить?
envsubst
заменит такие вещи,${GH_CLI_VER}
которые также объявлены как файл DockerfileARG
; просто передать данные напрямуюARG
и использоватьdocker build --build-arg
опцию, вероятно, проще, чем этотenvsubst
путь.2. (Если это так
$GITHUB_TOKEN
, храните такие учетные данные очень далеко от своего файла Dockerfile. Аннулируйте токен GitHub, если вы скомпрометировали его, включив в свой образ.docker inspect the-resulting-image
покажет вам токен открытым текстом.)