Это файл моего проекта pyproject.toml:
< pre class="lang-ini Prettyprint-override">
Код: Выделить всё
[tool.poetry]
name = "Test"
version = "0.0.1"
description = "Test project."
authors = [
"Me "
]
[tool.poetry.dependencies]
python = ">=3.8,=1.1.0"]
build-backend = "poetry.core.masonry.api"
[[tool.poetry.source]]
name = "my-lib"
url = "https://us-east4-python.pkg.dev/my-gcp-project/my-lib/simple/"
secondary = true
Код: Выделить всё
$ gcloud auth list
ACTIVE ACCOUNT
...
* @appspot.gserviceaccount.com
...
Итак, , с этой настройкой я могу запустить установку поэзии, зависимость загружается из моего частного реестра артефактов с использованием аутентификации из GCP.
Проблема возникает, когда я пытаюсь применить те же принципы внутри контейнер Docker.
Я создал файл Docker следующим образом:
Код: Выделить всё
# syntax = docker/dockerfile:1.3
FROM python:3.9
# Install Poetry
RUN curl -sSL https://install.python-poetry.org | python3 -
ENV PATH "${PATH}:/root/.local/bin"
# Install Google Cloud SDK CLI
ARG GCLOUD_VERSION="401.0.0-linux-x86_64"
RUN wget -q https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-${GCLOUD_VERSION}.tar.gz && \
tar -xf google-cloud-cli-*.tar.gz && \
./google-cloud-sdk/install.sh --quiet && \
rm google-cloud-cli-*.tar.gz
ENV PATH "${PATH}:/google-cloud-sdk/bin"
# install Google Artifact Rrgistry keyring integration
RUN pip install keyrings.google-artifactregistry-auth
RUN --mount=type=secret,id=GOOGLE_APPLICATION_CREDENTIALS ${GOOGLE_APPLICATION_CREDENTIALS} gcloud auth activate-service-account --key-file=/run/secrets/GOOGLE_APPLICATION_CREDENTIALS
RUN gcloud auth list
RUN keyring --list-backends
WORKDIR /app
# copy Poetry project files and install dependencies
COPY ./.env* ./
COPY ./pyproject.toml ./poetry.lock* ./
RUN poetry install
# copy source files
COPY ./app /app/app
# run the program
CMD poetry run python -m app.main
Код: Выделить всё
GOOGLE_APPLICATION_CREDENTIALSКод: Выделить всё
$ DOCKER_BUILDKIT=1 docker image build --secret id=GOOGLE_APPLICATION_CREDENTIALS,src=${GOOGLE_APPLICATION_CREDENTIALS} -t app-test .
...
#19 66.68 Source (my-lib): Authorization error accessing https://us-east4-python.pkg.dev/my-gcp-project/my-lib/simple/mylib/
#19 68.21
#19 68.21 RuntimeError
#19 68.21
#19 68.22 Unable to find installation candidates for mylib (0.1.1)
...
Я даже пытался выполнить отладку внутри образа, не выполняя команды поэтической установки и поэтического запуска..., и я увидел это, если это помогает отладке:
Код: Выделить всё
# gcloud auth list
Credentialed Accounts
ACTIVE ACCOUNT
* @appspot.gserviceaccount.com
Код: Выделить всё
# keyring --list-backends
keyrings.gauth.GooglePythonAuth (priority: 9)
keyring.backends.chainer.ChainerBackend (priority: -1)
keyring.backends.fail.Keyring (priority: 0)
Код: Выделить всё
# apt update
...
# apt install -y gnome-keyring
...
# dbus-run-session -- sh
GNOME_KEYRING_CONTROL=/root/.cache/keyring-MEY1T1
SSH_AUTH_SOCK=/root/.cache/keyring-MEY1T1/ssh
# poetry install
...
• Installing mylib (0.1.1): Failed
RuntimeError
Unable to find installation candidates for mylib (0.1.1)
at ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/installation/chooser.py:103 in choose_for
99│
100│ links.append(link)
101│
102│ if not links:
→ 103│ raise RuntimeError(f"Unable to find installation candidates for {package}")
104│
105│ # Get the best link
106│ chosen = max(links, key=lambda link: self._sort_key(package, link))
107│
...
Код: Выделить всё
gcloudКак мне разрешить мою зависимость внутри контейнера Docker?
Подробнее здесь: https://stackoverflow.com/questions/741 ... ide-docker
Мобильная версия