我有一些 Dockerfile 依赖于“pat”(个人访问令牌)文件,以便能够访问私有 nuget 提要。我从somakdas获得了一些灵感来完成这项工作。
要运行我的单个 Dockerfile,我首先创建一个包含我的令牌的“pat”文件并使用docker build -f Services/User.API/Dockerfile -t userapi:dev --secret id=pat,src=pat .
这按预期工作,但我的问题是使用 docker-compose.yml 文件让它工作。
首先我看了一下如何使用 docker-compose secrets,但我注意到 docker-compose secrets 是在运行时访问的,而不是在构建时访问的。https://github.com/docker/compose/issues/6358
所以现在我正在尝试创建一个包含我的 pat 文件的卷,但是cat: /pat: No such file or directory
当命令RUN --mount=type=secret...
运行时我得到了。这可能不安全,但它只会在本地运行。
我的 Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
RUN wget -qO- https://raw.githubusercontent.com/Microsoft/artifacts-credprovider/master/helpers/installcredprovider.sh | bash
WORKDIR /src
COPY ["User.API.csproj", "/Services/User.API"]
RUN --mount=type=secret,id=pat,dst=/pat export ENV VSS_NUGET_EXTERNAL_FEED_ENDPOINTS="{\"endpointCredentials\": [{\"endpoint\":\"<feed>\", \"username\":\"<user>\", \"password\":\"`cat /pat`\"}]}" \
&& dotnet restore "User.API.csproj" \
&& unset VSS_NUGET_EXTERNAL_FEED_ENDPOINTS
...
我的 docker-compose.yml
services:
user.api:
container_name: User.API
image: ${DOCKER_REGISTRY-}userapi
build:
context: .
dockerfile: Services/User.API/Dockerfile
networks:
- app_network
volumes:
- ./pat:/app/src/pat
构建 Dockerfile 后,我只能访问 docker-compose 卷吗?