我正在尝试从头开始构建一个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!
可能是什么问题?
答案 0 :(得分:9)
要在容器内运行服务器,请不要使用service
命令。这是一个脚本,它将在后台运行请求的服务器,然后退出。当脚本退出时,容器将停止(因为该脚本是主要进程)。
而是直接运行service
脚本为您启动的命令。除非它退出或崩溃,否则容器应该继续运行。
CMD ["/usr/sbin/nginx"]
这是必需的。类似的东西:
events {
worker_connections 1024;
}
您在nginx.conf的顶层有server { }
,但它必须在http { }
之类的协议定义内才有效。
http {
server {
...
root
声明和index.html
行的末尾缺少这些内容。
要定义索引文件,请使用index
,而不仅仅是文件名。
index index.html;
我假设你打算在这里使用<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服务器