带有路径匹配规则的traefik反向代理后面的Jenkins Docker容器

Dir*_*irk 1 jenkins docker traefik

我有一个运行traefik反向代理的Docker容器,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

然后,我使用Jenkins运行另一个容器,该容器通过标签配置转发规则,以便traefik将所有请求转发到其路径以开头的/jenkins

docker run \
  -d \
  --name jenkins \
  --label "traefik.port=8080" \
  --label "traefik.frontend.rule=PathPrefix: /jenkins" \
  jenkins/jenkins:lts
Run Code Online (Sandbox Code Playgroud)

现在,打开http://localhost/jenkins,请求已正确转发到Jenkins容器,该容器将我重定向到index.html主页。但是,该页面大部分为空白,因为未正确加载JavaScript和CSS资产。

查看浏览器控制台,可以看到索引页面正在尝试从http://localhost/static/4e9c623d/scripts/yui/button/button-min.js该设置中不存在的地址中加载它们。相反,它应该/jenkins/在URL中包含该部分并尝试从中加载它们,例如http://localhost/jenkins/static/4e9c623d/scripts/yui/button/button-min.js-手动点击该URL将在浏览器中显示JS文件。

我尝试使用类似的规则组合,--label "traefik.frontend.rule=PathPrefix: /jenkins; AddPrefix: /jenkins/"但这并没有改变任何内容。

我将如何编写规则以使其正常工作?

Seb*_*ian 5

您需要将自定义路径添加到环境变量,例如-e JENKINS_OPTS="--prefix=/jenkins"在运行Jenkins容器时。

参见https://github.com/jenkinsci/docker/blob/master/README.md#configuring-reverse-proxy