我对此还很陌生,我不知道我是否朝着正确的方向前进。我有一个自定义的nginx.conf,可以正常工作,我现在正尝试用它构建一个docker映像,以便可以在kuberentes中将其作为容器运行。
这是我的nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
stream {
#define the various upstreams
upstream app_1 {
server 192.168.122.206:5678;
}
upstream app_2 {
server 192.168.122.206:9000;
}
#map source port to upstream
map $remote_port $backend_svr {
1234 "app_1";
1235 "app_2";
}
#all udp traffic received on 8000, depending on source it will be redirected
server {
listen 8000 udp;
proxy_pass $backend_svr;
}
}
在我的虚拟机上,我有/ home / asvilla / docker-files / nginx-udp / Dockerfile,其中包含
FROM nginx
RUN chmod +w /etc/nginx/nginx.conf
COPY nginx.conf /etc/nginx/nginx.conf
RUN cat /etc/nginx/nginx.conf
我使用
构建它docker build -t "custom_nginx:dockerfile" .
nginx容器应根据udp数据包的来源将在端口8000上传入的udp流量重定向到端口5678或端口9000。
我使用docker run'image-id'运行,但是它没有按预期运行。运行docker ps显示“ PORTS 80 / tcp” 和“ ...的COMMAND nginx-g守护程序”
关于这些含义的任何指针。默认情况下,nginx将tcp绑定到端口80,但我更改了nginx.conf,我运行的cat命令显示文件已更新。
我假设我必须以某种方式公开nginx.conf中的端口。任何帮助表示赞赏。
答案 0 :(得分:1)
您必须像这样在运行时发布端口:
docker run -p 8000:8000 image-id
。
答案 1 :(得分:1)
如果您的最终目标是在Kubernetes中运行它,那么最简单的方法是将该配置文件放入ConfigMap中,然后只需配置Deployment即可运行标准的nginx映像。 (在普通Docker中,您可以使用docker run -v
在运行时将配置文件注入容器中,以达到类似效果。)
nginx在容器内监听哪个端口并不重要。如果常规的nginx容器希望在标准的HTTP端口80上侦听(并且看起来其Dockerfile
具有EXPOSE 80
指令),则可以在nginx配置中将其和listen 80
包含在其中(通过TCP,而不是UDP)。然后在Kubernetes部署中,可以将其指定为容器端口,如果要将其映射到其他端口,则可以在包装此端口的Service中进行。 (在普通Docker中,如果希望主机端口8000避免与其他事物冲突,docker run -p8000:80
。)
就最佳做法而言,我不鼓励直接将IP地址写入配置文件。如果它是集群外部的持久服务器,则可以在网络中设置DNS服务器来解析其主机名,或者获取诸如Amazon Route 53之类的云服务来为您执行此操作。如果它在Kubernetes中,请使用服务的DNS名称backend.default.svc.cluster.local
。即使您实际上只有一个IP地址,如果服务移动,创建一个ExternalName service也将为您提供帮助。
假设您在ConfigMap中有配置文件,那么您的Deployment看起来很像the sample Deployment in the Kubernetes documentation(它甚至运行着nginx:1.7.9
容器发布端口80)。
答案 2 :(得分:-1)
您需要在Dockerfile
中添加EXPOSE
FROM nginx
RUN chmod +w /etc/nginx/nginx.conf
COPY nginx.conf /etc/nginx/nginx.conf
RUN cat /etc/nginx/nginx.conf
EXPOSE 8000
然后在您运行它时执行:docker run -p 8000:8000 custom_nginx:dockerfile