我试图将一个卷附加到 docker 容器,但我尝试过的方法都没有奏效。我正在使用 Azure Windows 2016 vm 这里的 docker 信息:
Containers: 2
Running: 1
Paused: 0
Stopped: 1
Images: 108
Server Version: 1.12.2-cs2-ws-beta
Storage Driver: windowsfilter
Windows:
Logging Driver: json-file
Plugins:
Volume: local
Network: nat null overlay
Swarm: inactive
Default Isolation: process
Kernel Version: 10.0 14393 (14393.321.amd64fre.rs1_release_inmarket.161004-2338)
Operating System: Windows Server 2016 Datacenter
OSType: windows
Architecture: x86_64
CPUs: 2
Total Memory: 7 GiB
Name: wfgendocker
ID: QBKJ:RZAU:ADAI:WS4U:JV2K:IB5I:52K6:MWTD:NS3X:KRP6:SH6T:QKDT
Docker Root Dir: C:\ProgramData\docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
因此,在我的 docker 文件中,我将我的 IIS 网站复制到 inetpub/root 中,我的目标是将容器上的 /inetpub 挂载到本地计算机,以便可以在运行时对脚本和 web.config 进行更改。
起初我在成功构建的 dockerfile 中尝试了 VOLUME /inetpub,但是当我运行容器时,它给了我以下错误。
CreateContainer 期间遇到错误:Windows 系统调用失败:目录不为空
但是 docker 文档中没有提到需要为空的卷。
然后我尝试在运行时附加卷,例如 docker run -p 80:80 -v C:/build/inetpub:C:/inetpub web/iis 。这给了我与上面相同的错误。但是当我尝试
docker run -p 80:80 -v C:/build/inetpub:C:/randomtest web/iis 时。它可以工作,但我无法修改容器停止的其他文件。
我尝试的最后一件事是使用 docker-compose,在我的服务中我有卷: - ./inetpub:/inetpub 给出以下错误
无法为服务 wfgen 创建容器:无效的卷规格“/inetpub”:无效的卷规格
我尝试了 - ./inetpub:/inetpub 的许多变体,但它们总是给我同样的错误。
感谢您的帮助,我已经坚持了好几天没有任何结果。
这是我的码头文件
FROM microsoft/iis:10.0.14393.206
SHELL ["powershell"]
#adding windows features to vm
RUN Install-WindowsFeature NET-Framework-45-ASPNET ; \
Install-WindowsFeature Web-Asp-Net45
#temp tempfile
RUN mkdir C:\temp
#adding wfgen_admin user to vm
RUN mkdir C:\createUser
COPY createUser/ /createUser
RUN createUser/wfgen_adminCreate.ps1
#installing the services and starting them
RUN mkdir C:\aprogramfiles
COPY wfgenServices/ /aprogramfiles
RUN aprogramfiles/.\winsvc-install.cmd
#copying wfgen webcontent to vm
COPY inetpub/wwwroot/ /inetpub/wwwroot
RUN createUser/wfgen_admin_grant_access.ps1
#removing default website that runs on port 80
RUN Remove-WebSite -Name 'Default Web Site'
#creating a new iis website with the copied wfgen website i am not sure if i have the right commands here
RUN powershell -NoProfile -Command \
Import-module IISAdministration; \
New-IISSite -Name "wfgenroot" -PhysicalPath C:\inetpub\wwwroot - BindingInformation "*:80:";
#converting weforms and ws to applications
RUN ConvertTo-WebApplication "IIS:/Sites/wfgenroot/wfgen";
RUN ConvertTo-WebApplication "IIS:/Sites/wfgenroot/wfgen/WfApps/WebForms";
RUN ConvertTo-WebApplication "IIS:/Sites/wfgenroot/wfgen/ws"
#Setting the authentication type of the website
RUN Set-WebConfiguration system.web/authentication 'IIS:/Sites/wfgenroot' -value @{mode='Windows'}
RUN Set-WebConfigurationProperty -filter /system.webServer/security/authentication/anonymousAuthentication -name enabled -value true -PSPath 'IIS:/Sites/wfgenroot/wfgen'
RUN New-SelfSignedCertificate -CertStoreLocation createUser -DnsName 127.0.0.1
RUN New-WebBinding -Name "wfgenroot" -IP "*" -Port 443 -Protocol https
RUN $Thumbprint = (Get-ChildItem -Path Microsoft.PowerShell.Security\Certificate::LocalMachine\My | Where-Object {$_.Subject -match "127.0.0.1"}).Thumbprint;
RUN get-item Microsoft.PowerShell.Security\Certificate::LocalMachine\My\$Thumbprint | new-item 0.0.0.0!443
#RUN createUser/appcmdrun.ps1
#exposing port 80
EXPOSE 80
EXPOSE 443
WORKDIR /inetpub