Dockerized nginx无法启动

 软装之家888 发布于 2023-01-09 09:29

我尝试过关于对我的Web服务器进行docker化的一些教程和文档,但是我无法通过docker run命令运行该服务.

这是我的Dockerfile:

FROM ubuntu:trusty

#Update and install stuff
RUN apt-get update
RUN apt-get install -y python-software-properties aptitude screen htop nano nmap nginx

#Add files
ADD src/main/resources/ /usr/share/nginx/html

EXPOSE 80
CMD service nginx start

我创建我的图像:

docker build -t myImage .

当我运行它:

docker run -p 81:80 myImage

它似乎停止了:

docker ps -a

CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
90e54a254efa        pms-gui:latest      /bin/sh -c service n   3 seconds ago       Exit 0                                  prickly_bohr

我希望这个端口81-> 80运行,但事实并非如此.运行

docker start 90e

好像什么也没做.

我也试过直接输入它

docker run -t -i -p 81:80 myImage /bin/bash

从这里我可以开始服务

service nginx start

从另一个标签我可以看到它按预期工作(也在我的浏览器中):

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                NAMES
408237a5e10b        myImage:latest      /bin/bash           12 seconds ago      Up 11 seconds       0.0.0.0:81->80/tcp   mad_turing 

所以我认为我的Dockerfile出错了?任何人都可以帮我解决这个问题,我对Docker很陌生.谢谢!

解决方案:基于Ivant的答案,我找到了另一种在前台启动nginx的方法.我的Dockerfile CMD现在看起来像:

CMD /usr/sbin/nginx -g "daemon off;"

Ben Creasy.. 81

截至目前,官方的nginx图像使用它来运行nginx(参见Dockerfile):

CMD ["nginx", "-g", "daemon off;"]

就我而言,这足以让它正常启动.网上有教程提示更难实现的方法,但上面看起来很干净.

4 个回答
  • 使用docker-compose:

    要按照推荐的解决方案,添加到docker-compose.yml:

    command: nginx -g "daemon off"
    

    我还发现我可以简单地添加到nginx.conf:

    daemon off;
    

    ...并继续在docker-compose.yml中使用:

    command: service nginx start
    

    ...虽然它会使配置文件在docker之外变得不那么便携.

    2023-01-09 09:32 回答
  • 只要您指定的命令或命令行正在运行CMD,Docker容器ENTRTYPOINT就会运行.在您的情况下,service命令立即完成,整个容器关闭.

    解决此问题的一种方法是直接从命令行启动nginx(确保不将其作为守护程序运行).

    另一个选择是创建一个小脚本,启动服务然后永远睡眠.就像是:

    #!/bin/bash
    service nginx start
    while true; do sleep 1d; done
    

    并运行此而不是直接运行该service命令.

    第三种选择是使用类似runit或类似程序的东西,而不是普通服务.

    2023-01-09 09:32 回答
  • 截至目前,官方的nginx图像使用它来运行nginx(参见Dockerfile):

    CMD ["nginx", "-g", "daemon off;"]

    就我而言,这足以让它正常启动.网上有教程提示更难实现的方法,但上面看起来很干净.

    2023-01-09 09:32 回答
  • Docker是官方和用户映像的很好索引。当您想做某事时,很有可能已经有人做过;)

    只需在index.docker.io上搜索“ nginx”,您就会看到,有一个官方的nginx图像:https ://registry.hub.docker.com/_/nginx/

    那里有完整的指南,可帮助您启动Web服务器。

    随时查看其他用户的nginx图像以查看变体:)

    这个想法是在前台模式下启动nginx。

    2023-01-09 09:34 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有