Docker容器从mongo服务器开始

所以,我有一个docker集装箱准备好build设,但是当我build立时,我需要手动启动并从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从开始运行?

所以,用@ 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 

我也曾尝试过这一点。 我发现,你不能从Dockerfile启动进程。 通过为特定程序提供所有安装命令来制作Docker镜像似乎很自然,但在构build镜像时还不是正在运行的实例。

如果我没有记错,解决方法是在ENTRYPOINT中使用ENTRYPOINT语句,以便在运行时执行这些命令,而不是在编译时执行。

这可能会使一个有趣的后续阅读。

这里是Docker对ENTRYPOINT语句的文档 。