docker——nginx运行起不来或者说起来了又挂了
记得刚开始玩docker的时候,想着docker上运行一个nginx代理,于是写了个Dockerfile:
FROM nginx:latest WORKDIR .
COPY demo.conf /etc/nginx/conf.d/demo.conf
EXPOSE 80 CMD [ "nginx" ]
然后docker build生成,docker run运行,发现怎么都起不来,或者说起来了又挂了,到/var/lib/docker/containers目录下查看日志发现启动也是正常的:
#生成
sudo docker build -t nginx:v1 .
#运行
sudo docker run -id nginx:v1
#或者运行
sudo docker run -id nginx:v1 nginx

在百度查到,nginx默认是后台启动的,一般的我们启动nginx进程就是直接输入nginx,然后回车,但是docker的CMD要求命令能将进程挂起来,也就是hold住,显然,正常使用nginx命令启动不满足这个条件
后来查到,添加daemon off;配置可以让nginx在前台启动,于是我修改Dockerfile:
FROM nginx:latest WORKDIR .
COPY demo.conf /etc/nginx/conf.d/demo.conf
EXPOSE 80
RUN echo "daemon off;" >> /etc/nginx/nginx.conf CMD [ "nginx" ]
然后build&run,果然nginx完美的起来了!
其实我们是可以直接使用nginx镜像的,但是为什么使用Dockerfile就不行了呢?于是我直接使用nginx镜像创建一个容器,然后ps查看容器启动的命令:
#创建一个容器
sudo docker run -id nginx:latest
#查看运行中的容器状态,--no-trunc是显示所有的信息,不进行截取
sudo docker ps --no-trunc
结果显示:

可以看到它是使用下面命令启动的:
/docker-entrypoint.sh nginx -g 'daemon off;'
注意后面的daemon off;,于是我将Dockerfile改成:
FROM nginx:latest
WORKDIR .
COPY demo.conf /etc/nginx/conf.d/demo.conf
EXPOSE 80
CMD [ "nginx", "-g", "daemon off;" ]
成功启动!
另外,我们也可以在docker run时覆盖这个CMD,如:
#注意,这里的daemon off;需要使用引号包起来!
sudo docker run -id nginx:v1 nginx -g 'daemon off;'
其实,我们完全没有必要在Dockerfile里面添加一个CMD命令启动!因为添加了就是覆盖了nginx镜像原来的命令!
docker——nginx运行起不来或者说起来了又挂了的更多相关文章
- docker nginx 运行后无法访问
## 1 最近在学docker部署,一开始打算将nginx先docker化的. 对照官方的docker镜像介绍说明,进行自定义配置 将官方的nginx.conf复制出来后,修改添加了一些自定义,主要是 ...
- asp.netcore 3.0 Docker Nginx(震惊,原来docker是这样的!)
引言 Docker发布于2013年,Docker是dotCloud公司创始人在法国期间发起的一个公司内部项目,他是dotCloud多年云技术的一个革新.Docker在容器基础上进行了一步的封装,从网络 ...
- 记一个在docker中运行多线程event_loop.run_forever()的bug
问题简介 我写爬虫,用到了asyncio相关的事件循环,新建了一个线程去run_forever(),在docker中运行.后来程序有异常,主线程挂了,但是竟然不报错.查了很久,才找出来. 如果你新建一 ...
- 容器(docker)内运行Nginx
容器内运行nginx其实很简单,但是一开始还是浪费了我很多时间.这里写下来给大家省点时间. 1.创建nginx文件夹,放置各种配置及日志等. mkdir /docker/nginx docker 文件 ...
- 阿里云服务器用Docker配置运行nginx并访问
一.Docker拉取nginx镜像 docker pull nginx:1.12.2 这里是下载的是nginx的1.12.2版本,其他版本的镜像请访问https://hub.docker.com/r/ ...
- Docker中运行nginx
Docker中运行nginx 1.Docker中运行nginx 2.配置文件 2.1 nginx.conf 2.2 default.conf 3.docker的镜像可以挂什么卷 部分内容原文地址: C ...
- docker+nginx实现负载均衡
配置nginx配置文件(配置文件运行时是会加载到docker进程中)先建立nginx相关文件和目录,对应下面启动命令中的挂载位置,把主配置文件nginx.conf放到对应位置“/etc/docker/ ...
- docker下运行Gitlab CE+Jenkins+Nexus3+docker-registry-frontend
DevOps - Gitlab CE - Jenkins - Nexus Gitlab CE https://hub.docker.com/r/gitlab/gitlab-ce/ https://do ...
- 搭建 docker + nginx + keepalived 实现Web应用的高可用(亲测)
1. 环境准备 下载 VMware : https://www.vmware.com/go/getplayer-win 下载 Centos : https://mirrors.a ...
随机推荐
- vue 第三方图标库
"font-awesome": "^4.7.0", "dependencies": { "axios": "^ ...
- File类及常用操作方法
import java.io.File; import java.io.IOException; public class file { public static void main(String[ ...
- Tableau如何绘制多边形地图
一.把省\自治区拖拽至标记生成地图二.把销售额拖拽至标记 三.地图-地图层-冲蚀100% 四.最终结果如图所示
- python selenium表单定位
在Web应用中经常会遇到frame/iframe 表单嵌套页面的应用,WebDriver 只能在一个页面上对元素识别与定位,对于frame/iframe 表单内嵌页面上的元素无法直接定位.这时就需要通 ...
- SpringMVC 入门、请求、响应
目录 SpringMVC 概述 SSM 简介 MVC 简介 SpringMVC 简介 入门案例 Spring 技术架构 SpringMVC 基础配置 常规配置 Controller 加载控制 静态资源 ...
- java 编程基础:【注解】 提取注解信息,利用自定义注解编写测试类,注解绑定事件
提取注解信息 使用注解修饰了类.方法.成员变量等成员之后,这些注解不会自己生效,必须由开发者提供相应工具来提取并处理注解信息. Java使用java.lang.annotation.Annotat ...
- Learning to Sample
此处主要提出几个疑问和想法: 疑问: 为什么需要这个匹配过程?虽然G可能不是P的子集,但是为什么一定需要他是子集呢? 如果一定要匹配的话,匹配过程是没法反向传播的,所以只可以在推理阶段使用,那么这个推 ...
- SpringBoot整合websocket简单示例
依赖 <!-- springboot整合websocket --> <dependency> <groupId>org.springframework.boot&l ...
- Spring支持的常用数据库传播属性和事务隔离级别
一.事务的传播属性 1.propagation:用来设置事务的传播行为,一个方法运行在了一个开启了事务的方法中时,当前方法是使用原来的事务还是开启一个新的事务. (1)propagation.REQU ...
- 【LeetCode】581. Shortest Unsorted Continuous Subarray 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 方法一:排序比较 日期 题目地址:https://leetco ...