Тома с докером microsoft/iis

Я пытался подключить том к док-контейнеру, но ни один из способов, которые я пробовал, не работал. Я работаю с Azure Windows 2016 vm Вот информация о докере:

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

Итак, в моем файле докера я копирую свой веб-сайт IIS в inetpub/root, и моя цель — смонтировать /inetpub в контейнере на локальный компьютер, чтобы изменения в сценариях и web.config можно было вносить во время выполнения.

Сначала я попробовал VOLUME /inetpub в файле докеров, который успешно собрался, но затем, когда я запустил контейнер, он выдал следующую ошибку.

возникла ошибка во время создания контейнера: сбой в системном вызове Windows: каталог не пуст

Но нигде в документации докера нет упоминания о том, что том должен быть пустым.

Затем я попытался подключить том при запуске, например, docker run -p 80:80 -v C:/build/inetpub:C:/inetpub web/iis . это дало мне ту же ошибку, что и выше. но когда я пытаюсь
запустить docker -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

person thomasCM    schedule 25.10.2016    source источник
comment
Контейнер основан на microsoft/iis:10.0.14393.206.   -  person thomasCM    schedule 25.10.2016
comment
Не могли бы вы вставить свой Dockerfile?   -  person Carlos Rafael Ramirez    schedule 25.10.2016


Ответы (2)


Итак, я только что попробовал это:

docker run --rm -v c:/folder:c:/somefolder microsoft/iis

и он отлично работает, я могу создавать файлы, я могу их удалять и т.д. информация о докере: C:\Users\core>информация о докере

Containers: 2
 Running: 1
 Paused: 0
 Stopped: 1
Images: 6
Server Version: 1.12.2-cs2-ws-beta
Storage Driver: windowsfilter
 Windows:
Logging Driver: json-file
Plugins:
 Volume: local
 Network: nat null overlay transparent
Swarm: inactive
Security Options:
Kernel Version: 10.0 14393 (14393.321.amd64fre.rs1_release_inmarket.161004-2338)
Operating System: Windows 10 Enterprise
OSType: windows
Architecture: x86_64
CPUs: 4
Total Memory: 7.865 GiB
Name: pytop
ID: FENS:OO6R:J273:I5BB:2OGZ:HAMM:6YFX:53BP:XBA5:G3LE:QNKE:FLJ3
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

Я использую бета-версию докера.

person 4c74356b41    schedule 25.10.2016
comment
да, когда я запускаю docker --rm -v c:/folder:c:/temp wfgen/iis, он работает нормально, но temp пуст, мне нужно, чтобы это был каталог inetpub, содержащий содержимое сайта и конфигурации. Также я заметил много различий между докером Windows 10 и докером Windows Server 2016, особенно потому, что это лазурная виртуальная машина. - person thomasCM; 25.10.2016
comment
Извините, я не понимаю, что вы говорите. Как я уже сказал, когда я это делаю, все файлы и папки отображаются правильно, я могу редактировать их, удалять и т. д. - person 4c74356b41; 25.10.2016

Это связано с тем, что на данный момент контейнеры Windows поддерживают только пустые каталоги. Мне нужно было отобразить только объем журналов, и мне помогла эта команда в Dockerfile:

RUN ["powershell", "Remove-Item", "C:\\inetpub\\wwwroot\\Portals\\Logs\\*", "-Recurse"]

Затем я просто отправил docker run --rm -d -p 8000:80 -v c:/Logs:c:/inetpub/wwwroot/Portals/Logs --name site-v my-image-name Полученную информацию из здесь.

person Vladimir    schedule 15.02.2017