记得刚开始玩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运行起不来或者说起来了又挂了的更多相关文章

  1. docker nginx 运行后无法访问

    ## 1 最近在学docker部署,一开始打算将nginx先docker化的. 对照官方的docker镜像介绍说明,进行自定义配置 将官方的nginx.conf复制出来后,修改添加了一些自定义,主要是 ...

  2. asp.netcore 3.0 Docker Nginx(震惊,原来docker是这样的!)

    引言 Docker发布于2013年,Docker是dotCloud公司创始人在法国期间发起的一个公司内部项目,他是dotCloud多年云技术的一个革新.Docker在容器基础上进行了一步的封装,从网络 ...

  3. 记一个在docker中运行多线程event_loop.run_forever()的bug

    问题简介 我写爬虫,用到了asyncio相关的事件循环,新建了一个线程去run_forever(),在docker中运行.后来程序有异常,主线程挂了,但是竟然不报错.查了很久,才找出来. 如果你新建一 ...

  4. 容器(docker)内运行Nginx

    容器内运行nginx其实很简单,但是一开始还是浪费了我很多时间.这里写下来给大家省点时间. 1.创建nginx文件夹,放置各种配置及日志等. mkdir /docker/nginx docker 文件 ...

  5. 阿里云服务器用Docker配置运行nginx并访问

    一.Docker拉取nginx镜像 docker pull nginx:1.12.2 这里是下载的是nginx的1.12.2版本,其他版本的镜像请访问https://hub.docker.com/r/ ...

  6. Docker中运行nginx

    Docker中运行nginx 1.Docker中运行nginx 2.配置文件 2.1 nginx.conf 2.2 default.conf 3.docker的镜像可以挂什么卷 部分内容原文地址: C ...

  7. docker+nginx实现负载均衡

    配置nginx配置文件(配置文件运行时是会加载到docker进程中)先建立nginx相关文件和目录,对应下面启动命令中的挂载位置,把主配置文件nginx.conf放到对应位置“/etc/docker/ ...

  8. 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 ...

  9. 搭建 docker + nginx + keepalived 实现Web应用的高可用(亲测)

    1. 环境准备     下载 VMware : https://www.vmware.com/go/getplayer-win        下载 Centos : https://mirrors.a ...

随机推荐

  1. Template Metaprogramming in C++

    说实话,学习C++以来,第一次听说"Metaprogramming"这个名词. Predict the output of following C++ program. 1 #in ...

  2. SpringMVC(1):SpringMVC入门

    一,MVC 概述 MVC:模型,视图,控制器,是一种软件设计规范,本质是将业务逻辑,数据,显示,分离的方式来编写代码:前后端分离 Model:数据模型,提供要展示的数据,一般我们都会把这两个分离开来. ...

  3. Python multiprocessing 基础使用和小trick

    最近进行数据预处理时(噪声插入),单进程严重影响实验周期,故学习了multiprocessing并发执行不同数据集的处理,加快执行效率.现于此进行一些简单记录以供日后参考. 1. 基础: From m ...

  4. Groovy获取Bean两种方式(奇淫技巧操作)

    前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 背景: 在Java代码中当我们需要一个Bean对象,通常会使用spring中@Autowired注解,用来自动装配对象. 在Groovy ...

  5. pipeline配置前端项目

    vue pipeline { agent { label 'master'} options { timestamps() disableConcurrentBuilds() buildDiscard ...

  6. hitcontraining_magicheap

    拿到题目例行检查 程序是64位的程序 保护几乎全开,试运行一下程序 十分明显的堆溢出的界面,将程序放入ida中,shift+f12发现了后门程序 进入main主函数进行查看 可以看到当,v3==486 ...

  7. Niushop开源商店渗透测试

    靶机 提取码:le8l 首先连上靶机 先扫一下靶场ip,看看开启了哪些端口 开启了80端口,扫描一下目录 一个shop的界面, 一个admin后台管理界面 其他的目录翻看了一下, 看样子是网站的配置文 ...

  8. java 数据类型:集合接口Collection之List~ArrayList:remove移除;replaceAll改变原有值;sort排序;迭代器listIterator();

    什么是List集合: 特点: 元素有序可重复的集合. 集合中每个元素都有其对应的顺序索引. List集合默认按元素的添加顺序设置元素的索引,索引从0开始.   List接口的常用方法: List可以使 ...

  9. 如何在java web工程下建立存储property文件的文件夹,让Java程序直接读取

    如何在java web工程下建立存储property文件的文件夹,让Java程序直接读取: 步骤如下:

  10. ligerui的jquery.validate验证需要添加validate="{required:true,minlength:8,equalTo:'#newpassword'}"

    ligerui的jquery.validate验证需要添加validate="{required:true,minlength:8,equalTo:'#newpassword'}"