docker自定义nginx容器无法启动

时间:2017-02-18 19:21:52

标签: nginx docker

我正在尝试从头开始构建一个nginx图像(而不是使用官方的nginx图像)

FROM ubuntu
RUN apt-get update
RUN apt-get install -y nginx    
RUN rm -v /etc/nginx/nginx.conf
ADD nginx.conf /etc/nginx/
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

EXPOSE 80

COPY ./files/ /var/www/html/

CMD service nginx start

这是我当前目录下的nginx.conf文件。

server {

    root /var/www/html

    location / {
        index.html
    }

}

我在index.html文件夹

下的虚拟./files文件
<p1>hello world</p1>

我运行此命令

docker build -t hello-world .

并且

docker run -p 80:80 hello-world

但我说错误

 * Starting nginx nginx
   ...fail!

可能是什么问题?

2 个答案:

答案 0 :(得分:9)

请勿使用“service xyz start”

要在容器内运行服务器,请不要使用service命令。这是一个脚本,它将在后台运行请求的服务器,然后退出。当脚本退出时,容器将停止(因为该脚本是主要进程)。

而是直接运行service脚本为您启动的命令。除非它退出或崩溃,否则容器应该继续运行。

CMD ["/usr/sbin/nginx"]

nginx.conf缺少事件部分

这是必需的。类似的东西:

events {
    worker_connections 1024;
}

服务器指令不是顶级元素

您在nginx.conf的顶层有server { },但它必须在http { }之类的协议定义内才有效。

http {
    server {
        ...

nginx指令以分号结尾

root声明和index.html行的末尾缺少这些内容。

缺少“索引”指令

要定义索引文件,请使用index,而不仅仅是文件名。

index index.html;

没有HTML元素“p1”

我假设你打算在这里使用<p>

<p>hello world</p>

最终结果

Dockerfile:

FROM ubuntu
RUN apt-get update
RUN apt-get install -y nginx
RUN rm -v /etc/nginx/nginx.conf
ADD nginx.conf /etc/nginx/
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

EXPOSE 80

COPY ./files/ /var/www/html/

CMD ["/usr/sbin/nginx"]

nginx.conf:

http {
    server {

        root /var/www/html;

        location / {
            index index.html;
        }
    }
}
events {
    worker_connections 1024;
}
daemon off;

答案 1 :(得分:1)

一个人可以在docker hub中直接使用nginx的官方映像,只需使用以下行启动您的docker文件:FROM nginx

这是您可以使用的docker文件的示例:

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
COPY static-html-directory /usr/share/nginx/html
EXPOSE 80

如您所见,无需使用CMD来运行您的nginx服务器