use*_*545 15 docker dockerfile
在我的Dockerfile中,我有以下内容:
ARG a-version
RUN wget -q -O /tmp/alle.tar.gz http://someserver/server/$a-version/a-server-$a-version.tar.gz && \
mkdir /opt/apps/$a-version
Run Code Online (Sandbox Code Playgroud)
但是在构建时:
--build-arg http_proxy=http://myproxy","--build-arg a-version=a","--build-arg b-version=b"
Run Code Online (Sandbox Code Playgroud)
Step 10/15 : RUN wget...
被示为具有$a-version
在路径中而不是取代的值和生成失败.
我的问题是,什么可能导致这个问题,我该如何解决?
Jus*_*ard 16
我在为 Windows 使用 Windows 容器时遇到了同样的问题。
而不是这样做(在linux容器中工作)
FROM alpine
ARG TARGETPLATFORM
RUN echo "I'm building for $TARGETPLATFORM"
Run Code Online (Sandbox Code Playgroud)
你需要这样做
FROM mcr.microsoft.com/windows/servercore
ARG TARGETPLATFORM
RUN echo "I'm building for %TARGETPLATFORM%"
Run Code Online (Sandbox Code Playgroud)
只需根据操作系统更改可变分辨率即可。
小智 15
要注意的另一件事是,在所有FROM
语句之后,所有ARG
s 都将被收集并且不再可用。多阶段构建时要小心。
Rob*_*ert 14
不要-
在变量名中使用.
Docker构建将始终显示Dockerfile中记录的行,尽管变量值.
所以使用这个变量名a_version
:
ARG a_version
Run Code Online (Sandbox Code Playgroud)
看这个例子:
Dockerfile:
FROM alpine
ARG a_version
RUN echo $a_version
Run Code Online (Sandbox Code Playgroud)
建立:
$ docker build . --build-arg a_version=1234
Sending build context to Docker daemon 2.048 kB
Step 1/3 : FROM alpine
---> a41a7446062d
Step 2/3 : ARG a_version
---> Running in c55e98cab494
---> 53dedab7de75
Removing intermediate container c55e98cab494
Step 3/3 : RUN echo $a_version <<< note this <<
---> Running in 56b8aeddf77b
1234 <<<< and this <<
---> 89badadc1ccf
Removing intermediate container 56b8aeddf77b
Successfully built 89badadc1ccf
Run Code Online (Sandbox Code Playgroud)
Ole*_*leg 10
我花了很多时间让参数替换工作,但解决方案非常简单。内部的替换RUN
需要将参数引用括在双引号中。
ARG CONFIGURATION=Debug
RUN dotnet publish "Project.csproj" -c "$CONFIGURATION" -o /app/publish
Run Code Online (Sandbox Code Playgroud)
我能够代替在Windows集装箱的ARG的唯一方法是用前缀$env:
,提到这里。
我的 Dockerfile 的一个例子如下。请注意,ARG PAT
是在FROM之后定义的,因此它在RUN nuget sources add
命令中的使用范围内(如洪涛建议的那样)。我发现提供个人访问令牌的唯一成功方法是使用$env:PAT
FROM mcr.microsoft.com/dotnet/framework/sdk:4.7.2 AS build
WORKDIR /app
ARG PAT
# copy csproj and restore as distinct layers
COPY *.sln .
COPY WebApi/*.csproj ./WebApi/
COPY WebApi/*.config ./WebApi/
RUN nuget sources add -name AppDev -source https://mysource.pkgs.visualstudio.com/_packaging/AppDev/nuget/v2 -username usern -password $env:PAT
RUN nuget restore
# copy everything else and build app
COPY WebApi/. ./WebApi/
WORKDIR /app/WebApi
RUN msbuild /p:Configuration=Release
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2 AS runtime
WORKDIR /inetpub/wwwroot
COPY --from=build /app/WebApi/. ./
Run Code Online (Sandbox Code Playgroud)
实际的 Docker 命令如下所示:
docker build --build-arg PAT=mypatgoeshere -t webapi .
归档时间: |
|
查看次数: |
11533 次 |
最近记录: |