【docker】记录一次nginx启动失败的检测

本文记录了作者协助解决领导遇到的Dockers中Nginx启动问题,通过日志排查、配置文件修复和正确配置JIRA域名映射的过程,最终确保服务可用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

周日领导说docker nginx起不来了,导致jira域名映射失败,记录一下解决过程

操作

首先nginx不是自己部署,要先启动一下

docker start nginx 

在这里插入图片描述
发现打印出了nginx 但是 docker ps 发现 nginx还是启动失败

于是准备查看日志

docker logs -f nginx

在这里插入图片描述
报了一堆错误,也不知道是什么时候打的日志,后来解决之后猜测是因为配置文件为空的原因,因为没有找到event模块

所以首先看一下nginx的容器信息

docker inspect nginx

在这里插入图片描述
找到挂载信息了,可以看看配置文件,发现 /usr/nginx/conf 里面没有配置文件,这个时候就应该找到了问题;可是运维同学在查询问题的时候创建了一个空的nginx.conf,我没有打开配置文件

后来在老大的提醒下打开了配置文件发现是空的,然后就对配置文件进行了修改

先找了一个默认的nginx.conf的配置

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

然后docker start nginx 发现可以启动了

接下来增加正确的jira配置

   location / {
	proxy_pass http://192.168.1.111:8080;
	 proxy_redirect          off;  
                proxy_set_header        Host $host:$server_port;   ##重点在$server_port
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_max_temp_file_size 0;
                proxy_connect_timeout 90;
                proxy_send_timeout 90;
                proxy_read_timeout 90;
                proxy_buffer_size 4k;
                proxy_buffers 4 32k;
                proxy_busy_buffers_size 64k;
                proxy_hide_header Vary;
                proxy_set_header Accept-Encoding '';
                proxy_set_header Referer $http_referer;
                proxy_set_header Cookie $http_cookie;
        }

进入容器检测一下配置文件是否有问题

docker exec -it 容器id /bin/bash

nginx路径寻找 find / -name nginx

./nginx/sbin/nginx -t

检测发现少了一个}

:set nu

找到具体行,然后修复

ctrl +D  // 退出容器

启动nginx

docker restart nginx

结果

虽然解决的很慢 但是还是解决了问题,nginx单点也是有问题的,后期打算切换到多活的nginx,然后备份相关nginx文件

### Docker Nginx 容器启动失败的原因分析 DockerNginx 容器启动失败可能由多种原因引起,以下是常见的几个方面及其对应的解决方案: #### 1. 配置文件错误 如果挂载了自定义配置文件到容器内部 `/etc/nginx` 路径下,则可能存在语法错误或其他不兼容的设置。这会阻止 Nginx 正常加载并导致容器崩溃。 - **解决方案**: 使用 `docker logs <container_name>` 查看具体的报错日志[^3]。确认是否有类似于 “failed to load configuration file”的提示。如果是这种情况,请验证本地配置文件的内容是否正确无误,并重新构建或重启容器。 ```bash docker logs webserver ``` --- #### 2. 端口冲突 当尝试将容器内的端口映射至宿主机上的某个特定端口时(例如 `-p 80:80`),若该端口已被其他进程占用,则会导致绑定失败从而影响服务可用性。 - **解决方案**: 执行命令 `netstat -tuln | grep :80` 来检测当前系统是否存在正在监听 TCP/UDP 协议下的第80号端口的服务实例;如果有发现重复情况的话可以考虑更改目标端口号或者停止干扰源程序后再试一次操作流程即可解决问题[^2]。 ```bash sudo netstat -tuln | grep ':80' ``` --- #### 3. 文件权限不足 某些时候由于安全策略限制等原因造成外部共享给容器使用的资源路径缺乏必要的读写执行权利也会引发异常状况发生比如无法创建log记录等等现象出现进而致使整个应用层面上线困难重重难以顺利推进下去完成既定任务指标达成预期效果实现商业价值最大化追求利润增长点挖掘潜力股提升竞争力增强市场占有率扩大影响力范围广纳贤才招揽精英人才充实团队力量加强协作配合提高工作效率降低运营成本节约开支增加收益回报率获得更高的投资回报率ROI(Return On Investment). - **解决方案**: 修改指定目录的访问属性使其满足最低需求标准之后再进行关联动作测试观察最终表现形式如何变化调整直至恢复正常为止. ```bash chmod -R 755 /opt/nginx_docker/mapping chown -R root:root /var/log/nginx-docker ``` --- #### 4. 基础环境缺失 对于基于 CentOS 构建出来的定制化版本而言如果没有提前准备好必备组件库那么同样会出现各种奇葩问题层出不穷让人头疼不已急需找到有效途径加以应对处理才行啊亲们快来帮帮忙吧谢谢啦! - **解决方案**: 参考官方文档说明按照指引逐步完善依赖关系链路结构图谱绘制清晰明了便于后续维护管理升级等工作开展得更加顺畅高效快捷省事省力省钱又环保哦朋友们还不赶紧行动起来吗?[^4] ```Dockerfile FROM centos:latest RUN yum install epel-release -y && \ yum update -y && \ yum install nginx -y CMD ["nginx", "-g", "daemon off;"] ``` --- ### 总结 通过上述方法基本能够覆盖大部分场景下的常见故障类型并且给出了针对性较强的修复措施供大家参考借鉴学习模仿实践运用推广普及开来形成良性循环生态体系共同进步成长壮大起来迎接美好的明天未来可期让我们一起努力奋斗拼搏成就梦想共创辉煌伟业吧同志们加油干呀霍霍霍哈哈哈!!!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渐暖°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值