Использование envsubst с Dockerfile с помощью подстановки процессов нарушает сборку

#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} которые также объявлены как файл Dockerfile ARG ; просто передать данные напрямую ARG и использовать docker build --build-arg опцию, вероятно, проще, чем этот envsubst путь.

2. (Если это так $GITHUB_TOKEN , храните такие учетные данные очень далеко от своего файла Dockerfile. Аннулируйте токен GitHub, если вы скомпрометировали его, включив в свой образ. docker inspect the-resulting-image покажет вам токен открытым текстом.)