Docker容器以mongo服务器开头

时间:2017-06-15 12:23:02

标签: mongodb docker dockerfile docker-container docker-image

所以,我有一个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从开始运行?

2 个答案:

答案 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语句的支持。