Docker 以 mongo 服务器开头的容器

Docker Container starting with mongo server

所以,我有一个准备构建的 docker 容器,但是,当我构建它时,我需要手动从 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.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"]  

当我从 withing 容器启动 mongod 时,我的 Web api 应用程序运行良好,需要知道如何从启动时设置 mongod 运行?

我自己也试过一次。我发现您实际上无法从 Docker 文件启动进程。通过为特定程序提供所有安装命令来制作 Docker 映像似乎很自然,但在构建映像时它还不是 运行 实例。

如果我没记错的话,解决方案是在 Docker 文件中使用 ENTRYPOINT 语句,这样它将在运行时而不是构建时执行这些命令。

This 可能会成为有趣的后续阅读。

这里是 documentation Docker 的 ENTRYPOINT 语句。

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