具有路径匹配规则的 traefik 反向代理后面的 Jenkins Docker 容器
Jenkins Docker container behind traefik reverse proxy with path-matching rule
我有一个 Docker 容器 运行 宁一个 traefik reverse proxy 像这样:
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 的容器,它通过标签配置转发规则,以便 traefik
将所有路径以 /jenkins
:[=22= 开头的请求转发给它]
docker run \
-d \
--name jenkins \
--label "traefik.port=8080" \
--label "traefik.frontend.rule=PathPrefix: /jenkins" \
jenkins/jenkins:lts
现在,打开 http://localhost/jenkins
,请求被正确转发到 Jenkins 容器,它将我重定向到主 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/"
这样的规则组合,但这并没有改变任何东西。
如何编写规则才能使其正常工作?
您需要将自定义路径添加到环境变量,例如-e JENKINS_OPTS="--prefix=/jenkins"
当 运行 Jenkins 容器时。
见https://github.com/jenkinsci/docker/blob/master/README.md#configuring-reverse-proxy
我有一个 Docker 容器 运行 宁一个 traefik reverse proxy 像这样:
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 的容器,它通过标签配置转发规则,以便 traefik
将所有路径以 /jenkins
:[=22= 开头的请求转发给它]
docker run \
-d \
--name jenkins \
--label "traefik.port=8080" \
--label "traefik.frontend.rule=PathPrefix: /jenkins" \
jenkins/jenkins:lts
现在,打开 http://localhost/jenkins
,请求被正确转发到 Jenkins 容器,它将我重定向到主 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/"
这样的规则组合,但这并没有改变任何东西。
如何编写规则才能使其正常工作?
您需要将自定义路径添加到环境变量,例如-e JENKINS_OPTS="--prefix=/jenkins"
当 运行 Jenkins 容器时。
见https://github.com/jenkinsci/docker/blob/master/README.md#configuring-reverse-proxy