Docker图像自定义nginx.conf
我是个新手,我不知道我的方向是否正确。我有一个自定义的nginx.conf可以正常工作,我现在正试图用它构建一个docker映像,这样我就可以在kuberentes中将它作为一个容器运行 这是我的nginx.confDocker图像自定义nginx.conf,docker,nginx,kubernetes,Docker,Nginx,Kubernetes,我是个新手,我不知道我的方向是否正确。我有一个自定义的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/READ
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文件/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运行“图像id”运行,但它不能按预期运行。运行docker ps显示“端口80/tcp”
和“命令nginx-g守护进程…”
任何关于这些意味着什么的指针。nginx默认情况下会将tcp绑定到端口80,但我已经更改了nginx.conf,我运行的cat命令显示文件已更新
我假设我必须以某种方式公开nginx.conf中的端口。非常感谢您的帮助。您必须在运行时发布端口,如下所示:
docker run-p 8000:8000图像id
在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\u nginx:dockerfile
如果您的最终目标是在Kubernetes中运行它,那么最简单的方法就是将此配置文件放入一个配置文件中,然后配置部署以运行标准的nginx映像。(在普通Docker中,您可以使用Docker run-v
在运行时将配置文件注入到容器中,达到类似效果。)
nginx在容器中侦听什么端口并不重要。如果库存nginx容器希望在标准HTTP端口80上侦听(并且它的Dockerfile
似乎有一个EXPOSE 80
指令),那么您可以在nginx配置中使用该指令并listen 80
(通过TCP,而不是UDP)。然后,在Kubernetes部署中,您可以将其指定为容器端口,如果您想将其映射到其他对象,可以在包装此端口的服务中执行此操作。(在普通Docker中,如果希望主机端口8000避免与其他端口冲突,Docker run-p8000:80
)
就最佳实践而言,我不鼓励直接将IP地址写入配置文件。如果它是集群外的持久服务器,您可以在网络中设置DNS服务器来解析其主机名,或者获得类似Amazon Route 53的云服务来为您解决此问题。如果在Kubernetes中,请使用服务的DNS名称,backend.default.svc.cluster.local
。即使您确实只有一个IP地址,如果服务移动,创建一个IP地址也会对您有所帮助
假设您在ConfigMap中有配置文件,您的部署看起来非常像(它甚至运行一个
nginx:1.7.9
container publishing port 80)。这不会处理用于反馈的udp thingtanks。我将尝试将配置文件放入配置映射中。使用该服务,我可以将端口80映射到8000,并将其指定为udp?是的,您可以将任意容器端口映射到任意服务端口,并指定TCP与udp。(UDP上的HTTP…很奇怪,如果您不提供HTTP服务,那么我可以看到您需要一个不同的端口,但也可能需要一个不同的代理服务。)谢谢,这让它运行起来了!