docker - 使用Nginx作为使用Docker的Jenkins代理

标签 docker nginx jenkins docker-compose

我正在使用Nginx作为Jenkins服务器的代理。两者都在Docker容器中。

这个想法是Jenkins在端口8080上运行,而端口8080则暴露在外。 Nginx在端口80上侦听并将流量重定向到端口8080上的Jenkins。如果尝试直接访问端口8080,它将拒绝连接。

请参阅docker-compose.yml文件:

version: '3.7'

services:
    master:
        build: ./jenkins-master
        networks:
          - jenkins-net
        volumes:
          - jenkins-log:/var/log/jenkins
          - jenkins-data:/var/jenkins_home

   nginx:
      build: ./jenkins-nginx
      ports:
        - "80:80"
      networks:
        - jenkins-net

networks:
 jenkins-net:

volumes:
 jenkins-log:
 jenkins-data:

Jenkins 大师Dockerfile:
FROM jenkins/jenkins:alpine
LABEL maintainer=''

USER root
RUN mkdir /var/log/jenkins
RUN mkdir /var/cache/jenkins
RUN chown -R jenkins:jenkins /var/log/jenkins
RUN chown -R jenkins:jenkins /var/cache/jenkins
USER jenkins

ENV JAVA_OPTS='-Xmx8192m'
ENV JENKINS_OPTS=' --handlerCountMax=300 -- logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war'

这是nginx.conf文件:
server {
    listen 80;
    server_name localhost;
    access_log off;

   location / {

   proxy_pass         http://master:8080;

   proxy_set_header   Host             $host;
   proxy_set_header   X-Real-IP        $remote_addr;
   proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
   proxy_set_header   X-Forwarded-Proto http;
   proxy_max_temp_file_size 0;


   proxy_connect_timeout      150;
   proxy_send_timeout         100;
   proxy_read_timeout         100;

   proxy_buffer_size          8k;
   proxy_buffers              4 32k;
   proxy_busy_buffers_size    64k;
   proxy_temp_file_write_size 64k;

 }

}

这是我的jenkins-nginx Dockerfile:
FROM nginx:mainline-alpine

RUN rm /etc/nginx/conf.d/default.conf
COPY jenkins.conf /etc/nginx/conf.d/jenkins.conf
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx"]

添加Nginx Dockerfile以获得完整性:
FROM nginx:mainline-alpine

RUN rm /etc/nginx/conf.d/default.conf
COPY jenkins.conf /etc/nginx/conf.d/jenkins.conf
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx"]

Jenkins.conf文件:
daemon off;
user nginx;
worker_processes 2;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
   worker_connections  1024;
   use epoll;
   accept_mutex off;
}

http {
include  /etc/nginx/mime.types;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
default_type application/octet-stream;
log_format main  '$remote_addr - $remote_user [$time_local] "$request"'
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for" ';


  access_log  /var/log/nginx/access.log main;
  sendfile    on;
  keepalive_timeout  65;
  client_max_body_size  300m;
  client_body_buffer_size  128k;

  gzip on;
  gzip_http_version 1.0;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_proxied any;
  gzip_types text/plain text/css text/xml text/javascript application/xml application/xml+rss application/javascript application/json;
  gzip_disable 'MSIE [1-6]\.';
  gzip_vary on;
  include /etc/nginx/conf.d/*.conf;

 }

问题是两者都可以独立工作,但是一旦我尝试将它们连接到一个网络上,它们就会崩溃。

错误在两个服务上都抛出localhost refused to connect

最佳答案

您需要在docker-compose上公开端口8080

ports:
  - 8080
  - 50000:50000

这可能对nginx有帮助(jenkins.conf)
proxy_redirect http://master:8080/;

关于docker - 使用Nginx作为使用Docker的Jenkins代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57327691/

相关文章:

selenium - 使用 Jenkins 运行 headless firefox Xvfb 以运行 Selenium 测试

tomcat - 使用 Jenkins 将 war 部署到 tomcat 8

cassandra - 应用程序容器到 cassandra 节点 - 一对一还是?

node.js - WSL 上的 NodeJS+Webpack+Docker 项目使用 native 'fs' 库抛出错误

apache - Varnish 根据请求的文件是否存在在后端之间进行选择的好方法

ruby-on-rails - 净::ERR_INCOMPLETE_CHUNKED_ENCODING Nginx

php - nginx - 在内部重定向到 "/index.html"时重写或内部重定向周期

linux - 在 jenkins gerrit 触发器中添加 ssh key 文件 : "/...../.ssh/id_rsa" does not exist

docker - 我想使用一些从 ubuntu 到 alpine 的包

java - 如何在Docker中设置服务主机?