当 Docker 中的 Nginx 出现问题时,可以按照以下步骤进行排查和解决:
Error: listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use)
解决方法:
- 检查主机80端口是否被占用:sudo netstat -tulnp | grep :80
- 停止占用端口的服务或修改Nginx容器映射端口:
bash
docker run -p 8080:80 nginx
nginx: [emerg] unknown directive "xxx" in /etc/nginx/nginx.conf:xx
解决方法:
- 检查Nginx配置文件语法:
bash
docker exec -it nginx-container nginx -t
- 修复错误后重新加载配置:
bash
docker exec -it nginx-container nginx -s reload
docker: Error response from daemon: driver failed programming external connectivity
解决方法:
- 重启Docker服务:
bash
sudo systemctl restart docker
- 然后重新启动容器
查看容器日志:
docker logs nginx-container
进入容器检查配置:
docker exec -it nginx-container bash
# 然后检查Nginx配置
nginx -t
检查Nginx运行状态:
docker exec -it nginx-container nginx -s status
重新启动容器:
docker restart nginx-container
以调试模式运行Nginx:
docker run --name my-nginx -p 80:80 -d nginx nginx-debug -g 'daemon off;'
检查主机与容器的端口映射:
docker port nginx-container
检查容器网络:
docker inspect nginx-container | grep IPAddress
使用自定义配置文件:
docker run -v /path/to/your/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx
遇到具体错误时,可以根据错误信息进一步分析,大多数Nginx错误都会在日志中给出明确的提示。