Docker 内的 Nginx 状态端点 运行
Nginx status endpoint running inside Docker
我是 Nginx 的新手,我 运行 在一个 Docker 容器中为一个简单的网站提供服务。我想添加一个 /health
端点,它只是 returns 状态 200 + 一些任意内容。
我通过添加
从 /etc/nginx/
复制并调整了标准 nginx.conf
server {
location /health {
return 200 "alive";
}
}
在 http
块内的底部。但是当我 运行 Docker 并尝试访问 localhost/health
时,我只得到 no such file or directory
。在 localhost
访问网站工作正常。
我也试过复制其他代码块,例如这个:https://gist.github.com/dhrrgn/8650077
但后来我得到 conflicting server name "" on 0.0.0.0:80, ignored nginx: [warn] conflicting server name "" on 0.0.0.0:80, ignored
.
我是否将 location
放在 nginx.conf
中的错误位置?我需要一些特殊的服务器配置吗?有什么问题吗?
问题出在我的 Nginx Docker setup/configuration:我正在使用 nginx:alpine
,它的配置文件位于 /etc/nginx/conf.d/
。其中,default.conf
定义了 Nginx 的默认配置。因此,我不得不删除 default.conf
并将我的配置复制到那里。在 Dockerfile
:
COPY nginx.conf /etc/nginx/conf.d/nginx.conf
RUN rm /etc/nginx/conf.d/default.conf
当然我也得在nginx.conf
中定义标准路由然后:
server {
location / {
root /usr/share/nginx/html;
}
location /health {
return 200 'alive';
add_header Content-Type text/plain;
}
}
如果您想在一行中完成而不构建图像,您可以执行以下操作:
#1 创建Nginx.conf 文件
nano /tmp/nginx-tester/nginx.conf
并将以下内容放在那里:
events {}
http {
server {
location / {
root /usr/share/nginx/html;
}
location /health {
return 200 '{"status":"UP"}';
add_header Content-Type application/json;
}
}
}
如果你看到,它所做的就是提供一个带有 json 的 http 状态 200,说明状态是 UP
#2 运行 NgInx 图片
只是为了让它在一行中,避免每次都重新创建图像,您可以像这样指定一个卷:
docker run -it --rm -d -p 8077:80 --name nginx-tester -v /tmp/nginx-tester/nginx.conf:/etc/nginx/nginx.conf:ro nginx
-it
:交互式进程(如shell)
--rm
: 容器退出时被移除
-p 8077:80
: hostPort:containerPort
--name
:容器名称
-v
: 绑定挂载卷 (fileHost:fileContainer:ReadOnly)
nginx
: 将要下载的图像 运行
#3 测试一下
您只需转到 server
:8077
(这是您在步骤 #2
中指定的端口)
~ > curl http://myserver:8077/health
{"status":"UP"}
通过这种方式您可以更改配置文件,只需执行以下操作:
docker restart nginx-tester
您可以重新加载文件而无需重建映像。
我是 Nginx 的新手,我 运行 在一个 Docker 容器中为一个简单的网站提供服务。我想添加一个 /health
端点,它只是 returns 状态 200 + 一些任意内容。
我通过添加
从/etc/nginx/
复制并调整了标准 nginx.conf
server {
location /health {
return 200 "alive";
}
}
在 http
块内的底部。但是当我 运行 Docker 并尝试访问 localhost/health
时,我只得到 no such file or directory
。在 localhost
访问网站工作正常。
我也试过复制其他代码块,例如这个:https://gist.github.com/dhrrgn/8650077
但后来我得到 conflicting server name "" on 0.0.0.0:80, ignored nginx: [warn] conflicting server name "" on 0.0.0.0:80, ignored
.
我是否将 location
放在 nginx.conf
中的错误位置?我需要一些特殊的服务器配置吗?有什么问题吗?
问题出在我的 Nginx Docker setup/configuration:我正在使用 nginx:alpine
,它的配置文件位于 /etc/nginx/conf.d/
。其中,default.conf
定义了 Nginx 的默认配置。因此,我不得不删除 default.conf
并将我的配置复制到那里。在 Dockerfile
:
COPY nginx.conf /etc/nginx/conf.d/nginx.conf
RUN rm /etc/nginx/conf.d/default.conf
当然我也得在nginx.conf
中定义标准路由然后:
server {
location / {
root /usr/share/nginx/html;
}
location /health {
return 200 'alive';
add_header Content-Type text/plain;
}
}
如果您想在一行中完成而不构建图像,您可以执行以下操作:
#1 创建Nginx.conf 文件
nano /tmp/nginx-tester/nginx.conf
并将以下内容放在那里:
events {}
http {
server {
location / {
root /usr/share/nginx/html;
}
location /health {
return 200 '{"status":"UP"}';
add_header Content-Type application/json;
}
}
}
如果你看到,它所做的就是提供一个带有 json 的 http 状态 200,说明状态是 UP
#2 运行 NgInx 图片
只是为了让它在一行中,避免每次都重新创建图像,您可以像这样指定一个卷:
docker run -it --rm -d -p 8077:80 --name nginx-tester -v /tmp/nginx-tester/nginx.conf:/etc/nginx/nginx.conf:ro nginx
-it
:交互式进程(如shell)--rm
: 容器退出时被移除-p 8077:80
: hostPort:containerPort--name
:容器名称-v
: 绑定挂载卷 (fileHost:fileContainer:ReadOnly)nginx
: 将要下载的图像 运行
#3 测试一下
您只需转到 server
:8077
(这是您在步骤 #2
中指定的端口)
~ > curl http://myserver:8077/health
{"status":"UP"}
通过这种方式您可以更改配置文件,只需执行以下操作:
docker restart nginx-tester
您可以重新加载文件而无需重建映像。