尝试按照教程找到here,但遇到问题。
我从项目目录运行以下命令:
docker build -t my.solution .
我得到以下内容:
Sending build context to Docker daemon 111.6kB
Step 1/17 : FROM microsoft/aspnetcore:2.0-nanoserver-1709 AS base
---> ccfb41c8f5b5
Step 2/17 : WORKDIR /app
---> Using cache
---> e29a68e16001
Step 3/17 : EXPOSE 80
---> Using cache
---> 976388139964
Step 4/17 : FROM microsoft/aspnetcore-build:2.0-nanoserver-1709 AS build
---> d7ab4e860769
Step 5/17 : WORKDIR /src
---> Using cache
---> 4ab01220723e
Step 6/17 : COPY my.solution.sln ./
COPY failed: CreateFile \\?\C:\ProgramData\Docker\tmp\docker-builder564035917\my.solution.sln: The system cannot find the file specified.
我不知道为什么它试图在它正在寻找它的位置找到该文件。谁能帮我?我需要进行配置设置吗?我的Docker文件如下所示:
FROM microsoft/aspnetcore:2.0-nanoserver-1709 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0-nanoserver-1709 AS build
WORKDIR /src
COPY my.solution.sln ./
COPY my.solution/my.solution.csproj my.solution/
RUN dotnet restore -nowarn:msb3202,nu1503
COPY . .
WORKDIR /src/my.solution
RUN dotnet build -c Release -o /app
FROM build AS publish
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "my.solution.dll"]
更新
Per @ AlexGera的回答,我尝试将docker文件更改为:
FROM microsoft/aspnetcore:2.0-nanoserver-1709 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0-nanoserver-1709 AS build
WORKDIR /src
VOLUME C:/tmp
COPY my.solution.sln c:/tmp/
COPY my.solution/my.solution.csproj my.solution/
RUN dotnet restore -nowarn:msb3202,nu1503
COPY . .
WORKDIR /src/my.solution
RUN dotnet build -c Release -o /app
FROM build AS publish
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "my.solution.dll"]
但错误消息没有显着改变:
docker build -t my.solution .
Sending build context to Docker daemon 111.6kB
Step 1/18 : FROM microsoft/aspnetcore:2.0-nanoserver-1709 AS base
---> ccfb41c8f5b5
Step 2/18 : WORKDIR /app
---> Using cache
---> e29a68e16001
Step 3/18 : EXPOSE 80
---> Using cache
---> 976388139964
Step 4/18 : FROM microsoft/aspnetcore-build:2.0-nanoserver-1709 AS build
---> d7ab4e860769
Step 5/18 : WORKDIR /src
Removing intermediate container 31e30e2346aa
---> 61c7df20f3c4
Step 6/18 : VOLUME C:/tmp
---> Running in fada6c728151
Removing intermediate container fada6c728151
---> 7a650440cc1f
Step 7/18 : COPY my.solution.sln c:/tmp/
COPY failed: CreateFile \\?\C:\ProgramData\Docker\tmp\docker-builder832533802\my.solution.sln: The system cannot find the file specified.
答案 0 :(得分:13)
在我看来,新解决方案随附的标准Dockerfile出现了错误:/
我将Dockerfile从PowerShell移至解决方案文件夹:
mv Dockerfile ../Dockerfile
从那里运行docker build命令对我来说有用...
答案 1 :(得分:2)
如果指定了阶段,COPY命令将从构建上下文或先前的构建阶段复制文件。使用您的构建命令:
docker build -t my.solution .
上下文为.
,首先发送到docker引擎,该引擎将其放置在仅用于构建的临时位置。
因此请使用复制命令:
Step 6/17 : COPY my.solution.sln ./
文件my.solution.sln
需要存在于运行build命令的文件夹中。
对于目的地,文件将被复制到容器内的工作目录,或者示例中为/src
。
答案 2 :(得分:1)
我在VS2017解决方案中发现了相同的情况,其中构建是由docker compose启动的,而yml文件是项目上方的一个目录。
如果您想直接使用docker文件构建docker文件,则需要将docker文件移动到上下文的一个级别
答案 3 :(得分:0)
复制之前在图像中添加卷以复制到哪里。 像这样:
VOLUME C:/Users/mysolution
COPY my.solution.sln C:/Users/mysolution
尽量不要在目录名称中使用点。
答案 4 :(得分:0)
这可能是由DockerFile旁边的.dockerignore文件引起的,它忽略了/ obj / *之外的所有内容。 将其复制到另一个文件夹后,您无需再复制.dockerignore文件,因此不会排除任何内容,并且可以正常工作。
答案 5 :(得分:0)
我将Dockerfile移至根文件夹(存在.sln和.dockerignore文件的位置),并且问题得到解决
答案 6 :(得分:0)
完全适合谁使用Visual Studio:
运行此命令:
docker build -t . your_application_name/Dockerfile
Dockerfile复制路径:
["your_application_name/your_application_name.csproj","your_application_name/"]
我们运行build命令docker build命令,无法在项目路径位置找到dockerfile。
答案 7 :(得分:0)
Visual Studio在项目级别创建Docker文件,但是,该Dockerfile被定制为从更高级别(解决方案级别)运行。
解决此问题的最简单方法是上一层(Solution文件夹),然后指定项目文件夹:
<webUser>user_email/webUser>
<webPassword>jira_token</webPassword>
答案 8 :(得分:-1)
使用\\
FROM microsoft\\aspnetcore-build:2.0-nanoserver-1709 AS build
请参阅以下示例
FROM microsoft/aspnetcore:2
WORKDIR /app
EXPOSE 80
COPY bin\\Debug\\netcoreapp2.0 .
ENTRYPOINT ["dotnet","DOCKER-API.dll"]