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
所以,我有一个准备构建的 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