Jenkins Docker容器,后面跟着path匹配规则的traefik反向代理
我有一个Docker容器运行一个traefik反向代理就像这样:
docker run \ -d \ --name traefik-reverse-proxy \ --network="host" \ -p 80:80 \ -v /dev/null:/etc/traefik/traefik.toml \ -v /var/run/docker.sock:/var/run/docker.sock \ traefik:1.5-alpine \ --docker
然后我用Jenkins运行另一个容器,它通过标签configuration转发规则,以便traefik
将所有请求转发traefik
/jenkins
开头的path:
docker run \ -d \ --name jenkins \ --label "traefik.port=8080" \ --label "traefik.frontend.rule=PathPrefix: /jenkins" \ jenkins/jenkins:lts
现在,打开http://localhost/jenkins
,请求被正确转发到Jenkins容器,该容器将我redirect到主index.html
页面。 但是,由于JavaScript和CSS资源未正确加载,因此该页面大部分为空白。
查看浏览器控制台,我可以看到索引页正在尝试从http://localhost/static/4e9c623d/scripts/yui/button/button-min.js
这样的地址加载它们。 相反,它应该在URL中包含/jenkins/
部分,并尝试从例如http://localhost/jenkins/static/4e9c623d/scripts/yui/button/button-min.js
加载它们 – 而不是手动点击该URL显示我在浏览器中的JS文件。
我尝试使用像--label "traefik.frontend.rule=PathPrefix: /jenkins; AddPrefix: /jenkins/"
的规则组合,但是这并没有改变任何东西。
我该如何编写规则才能正常工作?
在运行Jenkins容器时,您需要将自定义path添加到环境variables,例如-e JENKINS_OPTS="--prefix=/jenkins"
。
请参阅https://github.com/jenkinsci/docker/blob/master/README.md#configuring-reverse-proxy