所以,我有一个docker容器可以构建,但是,当我构建它时,我需要去manualy并从docker容器中启动mongod。我究竟做错了什么?我从Dockerfile启动mongod,但看起来有些东西正在杀死进程,或者进程从未被执行过?
FROM microsoft/iis:10.0.14393.206
SHELL ["powershell"]
RUN Install-WindowsFeature NET-Framework-45-ASPNET ; \
Install-WindowsFeature Web-Asp-Net45
COPY Pub Pub
RUN mkdir data\db
COPY mongodb_installer.msi mongodb_installer.msi
RUN Start-Process -FilePath 'mongodb_installer.msi' -ArgumentList '/quiet', '/NoRestart' -Wait ; \
Remove-Item .\mongodb_installer.msi
RUN 'C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe'
RUN Remove-WebSite -Name 'Default Web Site'
RUN New-Website -Name 'Pub' -Port 80 \
-PhysicalPath 'C:\Pub' -ApplicationPool '.NET v4.5'
EXPOSE 80
CMD ["ping", "-t", "localhost"]
当我从容器启动mongod时,我的web api应用程序运行正常,需要知道如何设置mongod从开始运行?
答案 0 :(得分:2)
因此,在@ Peri461提供答案的情况下朝着正确的方向前进,这使得它最终有效:
FROM microsoft/iis:10.0.14393.206
SHELL ["powershell"]
RUN Install-WindowsFeature NET-Framework-45-ASPNET ; \
Install-WindowsFeature Web-Asp-Net45
COPY Pub Pub
RUN mkdir data\db
COPY mongodb_installer.msi mongodb_installer.msi
RUN Start-Process -FilePath 'mongodb_installer.msi' -ArgumentList '/quiet', '/NoRestart' -Wait ; \
Remove-Item .\mongodb_installer.msi
RUN Remove-WebSite -Name 'Default Web Site'
RUN New-Website -Name 'Pub' -Port 80 \
-PhysicalPath 'C:\Pub' -ApplicationPool '.NET v4.5'
ADD init.bat init.bat
ENTRYPOINT C:\init.bat
EXPOSE 80
CMD ["ping", "-t", "localhost"]
入口点应指向容器启动时应执行的批处理。之后,只需启动容器,如:
docker run --name pub -d -p 80:80 pub
答案 1 :(得分:1)
我自己也曾尝试过这一点。我发现你实际上无法从Dockerfile启动进程。通过为某个程序提供所有安装命令来制作Docker镜像似乎很自然,但是当你构建图像时它还不是一个正在运行的实例。
如果我没记错的话,解决方法是在Dockerfile中使用ENTRYPOINT
语句,以便它在运行时而不是构建时执行这些命令。
This可能会有一个有趣的后续阅读。
这是documentation Docker对ENTRYPOINT
语句的支持。