Основной вопрос:
Как передать параметры в Apache в Docker для Windows (контейнеры Windows) с помощью команды CMD в Dockerfile?
Справочная информация:
Я пытаюсь докеризировать один из наших проектов, использующих портал Apache, который обычно выполняется с помощью следующей команды:
C:\Company\MiniServer\Apache2.4\bin\CompanyMiniServer.exe -k start -n CompanyMiniServer
До сих пор мне удалось настроить Dockerfile, который устанавливает и запускает его, но немедленно завершает контейнер при запуске из-за отсутствия CMD. Этот Dockerfile выглядит так:
# Starts from the windows server core
FROM microsoft/windowsservercore
# Install Visual C++ Redistributable for Visual Studio 2012 Update 4 x86
ADD http://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU3/vcredist_x86.exe C:/installers/vc2012/vcredist_x86.exe
RUN C:\installers\vc2012\vcredist_x86.exe /quiet /install
# Install Visual C++ Redistributable for Visual Studio 2015 Update 3 x86
ADD https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x86.exe C:/installers/vc2015/vc_redist.x86.exe
RUN C:\installers\vc2015\vc_redist.x86.exe /quiet /install
# Add the Files
ADD Company C:/Company/
# Sets Shell Mode to use PowerShell
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
# Installs and starts the Company Mini Server via Powershell Script
RUN C:\Company\InstallAndStartMiniServer.ps1
Это работает, но только при запуске с использованием следующей команды, которую я не считаю постоянной, поскольку я не могу использовать ее в docker-compose:
docker run -p 6007:6007 -p 6008:6008 --name companyminiserver_container -d -it companyminiserver powershell
Если я сделаю это так, я смогу получить доступ к мини-серверу через localhost: 6007.
Однако я хочу, чтобы это работало с помощью команды CMD.
Я пробовал следующее:
CMD [ "C:\\Company\\MiniServer\\Apache2.4\\bin\\CompanyMiniServer.exe" ]
Это создает постоянный контейнер при запуске даже без суффикса -it powershell. Однако он не позволяет мне получить доступ к MiniServer, как в предыдущем решении, и вместо этого отображает следующее сообщение об ошибке, предположительно из-за отсутствия параметров «-k start -n CompanyMiniServer»:
Forbidden
You don't have permission to access /portal/ on this server.
Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
Поэтому я попытался добавить параметры различными способами, но ни один из них не был успешным:
CMD [ "C:\\Company\\MiniServer\\Apache2.4\\bin\\CompanyMiniServer.exe","-k start","-n CompanyMiniServer" ]
CMD [ "C:\\Company\\MiniServer\\Apache2.4\\bin\\CompanyMiniServer.exe","-k start -n CompanyMiniServer" ]
CMD [ "C:\\Company\\MiniServer\\Apache2.4\\bin\\CompanyMiniServer.exe","-k","start","-n CompanyMiniServer" ]
CMD [ "C:\\Company\\MiniServer\\Apache2.4\\bin\\CompanyMiniServer.exe","-k","start","-n","CompanyMiniServer" ]
CMD [ "C:\\Company\\MiniServer\\Apache2.4\\bin\\CompanyMiniServer.exe -k start -n CompanyMiniServer" ]
Все это просто вызвало автоматическое завершение контейнера.