[英]Powershell cannot find file when run from dockerfile, but works when manually executed inside container
I am trying to set up SSL for a ASP.NET web application that is running in a docker for windows container. I am trying to set up SSL for a ASP.NET web application that is running in a docker for windows container. I am running on Windows 10.我在 Windows 10 上运行。
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:23:10 2020
OS/Arch: windows/amd64
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 19.03.8
API version: 1.40 (minimum version 1.24)
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:37:20 2020
OS/Arch: windows/amd64
Experimental: true
Below is my dockerfile:下面是我的 dockerfile:
FROM microsoft/aspnet:4.7.2-windowsservercore-1803
USER ContainerAdministrator
EXPOSE 443
ARG source
WORKDIR /inetpub/wwwroot
COPY ${source:-obj/Docker/publish} .
RUN Add-WindowsFeature Web-Scripting-Tools
RUN Remove-WebSite -Name 'Default Web Site'
RUN New-Website -Name 'myApp' -IPAddress '*' -Port 443 -PhysicalPath C:\inetpub\wwwroot -ApplicationPool '.NET v4.5' -Ssl -SslFlags 0
#CMD ["powershell.exe", "-File", "AddCertificate.ps1"]
#RUN ["powershell", "C:\inetpub\wwwroot\AddCertificate.ps1"]
RUN powershell.exe -Command "\
Import-Module IISAdministration; \
Import-Module WebAdministration; \
$pwd = ConvertTo-SecureString -String 'passw0rd!' -Force -AsPlainText; \
# Import the certificate and store it in a variable to bind to later; \
$cert = Import-PfxCertificate -Exportable -FilePath C:\inetpub\wwwroot\selfCert.pfx -CertStoreLocation cert:\localMachine\My -Password $pwd; \
# Take the imported certificate and bind it to all traffic toward port 443 (you need to specify IP if you want multiple apps on 1 docker which I believe is ill-advised); \
New-Item -Path IIS:\SslBindings\0.0.0.0!443 -value $cert;"
Problem: Docker fails with the error that selfCert.pfx is not found.问题:Docker 失败,错误为找不到 selfCert.pfx。
I tried moving all these commands to a powershell script and tried running that too.我尝试将所有这些命令移动到 powershell 脚本并尝试运行它。 Somehow docker/powershell cannot find my.ps1 file too.不知何故 docker/powershell 也找不到 my.ps1 文件。
When I connect to the container manually, I can see the files in the expected location.当我手动连接到容器时,我可以在预期位置看到文件。 I can also execute.PS1 successfully.我也可以成功执行.PS1。 The problem occurs only when its executed from the dockerfile.该问题仅在从 dockerfile 执行时出现。
I tried USER ContainerAdministrator, also different ways of calling PowerShell with -Bypass -File but unable to run it from dockerfile.我尝试了 USER ContainerAdministrator,以及使用 -Bypass -File 调用 PowerShell 的不同方式,但无法从 dockerfile 运行它。
Need some help in getting this run and identify why this is happening.需要一些帮助才能运行并确定发生这种情况的原因。
Thanks.谢谢。
I was also facing the same issue.我也面临同样的问题。 As per my investigation, there is one .dockerignore file within the same directory which is causing these file path related restriction.根据我的调查,同一目录中有一个.dockerignore文件导致这些文件路径相关的限制。 We would require to mention these relative path ignore syntax in the .dockerignore file.我们需要在.dockerignore文件中提及这些相对路径忽略语法。
I have used Publish solution feature in visual studio then copied the content from Publish folder to the container working directory through docker file.我在 Visual Studio 中使用了发布解决方案功能,然后通过 docker 文件将内容从发布文件夹复制到容器工作目录。
Below steps have been followed:已执行以下步骤:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.