小编Kon*_*ngh的帖子

使用Traefik路由路径

目前我正在尝试使用Traefik为一些docker容器设置一个loadbalancer/reverse代理.我在配置Treafik以使用一些前缀路径使我的应用程序可用时遇到了麻烦.基于这个例子,我能够使用Docker和Docker组合运行基本的Traefik配置.问题是我能够在路径上获得'whoamI'容器,但不能在我的app和其他容器中访问.

例如,我创建了一个docker-compose文件(见下文)来启动whoamI容器和五个Portainer容器(这样人们可以重新创建场景).我希望woamI可以在/wai和Portainer上找到/portainer1.

相反,我可以访问whoamI webserver(via /wai)而不是Portainer(via /portainer1).但是,我能够到达Portainer /portainer2.这两者之间Traefik配置的唯一区别是使用'PathStrip'而不是'Path'.然而,令人烦恼的是,我只能在导航时获得白页/portainer2; 只加载页面标题和一些html.我还启动了一个暴露给主机的Portainer容器,以验证预期的行为(一个普通的Portainer页面).另见下图.

编辑:

有趣的是,我也能够/portainer4/(但不是/portainer4)获得Portainer,从而产生相同的白页.导航到/portainer2/和之间的区别/portainer4/是我注意到Traefik中的一些额外日志记录(见下文).当通过导航到Portainer时/portainer4/,日志中会显示三条额外的行,表示400状态.经过一番调查,我发现这来自于我的浏览器尝试加载其他文件(即javascript文件,favicon和样式表).因此,当/portainer4/我在浏览器中访问Portainer时,它知道需要获取这些额外的文件并尝试这样做(导航时不会发生这种情况/portainer2).当我尝试自己访问文件时,例如导航到/portainer4/ico/favicon.ico,我得到了一个400 Bad Request.最后,导航到/portainer2/ico/favicon.ico的时候看到的是404 page not found.

根据这些结果,我想知道:

  • 为什么我不能在/ portainer1到达Portainer而是在/ portainer2上?
  • 导航到/ portainer2时为什么我看不到完整的Portainer页面?
  • 为什么访问/portainer2/和之间的文件(例如,favicon)之间的行为存在差异/portainer4/
  • 400 Bad Request实际意味着什么以及此问题是否/如何解决此问题

我真的很感激正确方向的一些指示

一些截图: 不同的Treafik路径

泊坞窗,compose.yml:

version: '2'

services:   
  traefik:
    container_name: traefik
    image: traefik
    command: --web --docker --docker.domain=docker.localhost --logLevel=DEBUG
    ports:
      - "80:80" …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose traefik

8
推荐指数
2
解决办法
7416
查看次数

在 Groovy 中访问 Jenkins 全局属性

此时,我在管理 Jenkins -> 配置系统 -> 全局属性下定义了一个名为 GLOBAL_VAR 的环境变量,其值为“test”。当项目正在构建时,我有一个 shell 脚本,其中包含

echo "The value of the global variable is ${GLOBAL_VAR}"
Run Code Online (Sandbox Code Playgroud)

如果执行的话,结果就是我所期望的:

The value of the global variable is test
Run Code Online (Sandbox Code Playgroud)

现在我的问题是我想在 Groovy 脚本中访问此变量,该脚本用于在 Jenkins 的参数化构建属性中创建下拉菜单。此下拉菜单包含在执行构建时执行的 shell 脚本中也使用的值。因此,当有人在 Jenkins 本身中单击“使用参数构建”时,应该创建下拉项,例如在启动任何构建之前

我不想每次想要更改这些值时都更改 shell 脚本代码和下拉 Groovy 脚本。此外,我想在不同的构建作业中使用相同的值,这意味着每次需要更改变量时都需要更改它们。

创建下拉菜单的动态选择参数仅包含以下 Groovy 表达式来生成选项:

 def list = ["Option 1", "Option 2", "Option 3", "Option 4"]
Run Code Online (Sandbox Code Playgroud)

我想将 GLOBAL_VAR 的值添加到此列表中。

有谁知道如何在 Groovy 中访问 Jenkins 环境变量?或者有谁知道管理我想在动态选择参数(下拉菜单)和构建时执行的 shell 脚本中使用的变量的不同方法?

groovy global-variables jenkins

5
推荐指数
2
解决办法
1万
查看次数

使用 Jenkins 构建在 Docker 容器内运行的 Docker 镜像

我正在阅读这篇关于设置 Jenkins 在 Docker 容器内运行的文章,以便 Jenkins 能够自行构建 Docker 镜像。尽管该解决方案有效,但正如作者指出的那样,存在一些安全问题。

主要的安全问题在于 Jenkins 需要运行 Docker 命令,这需要在 Jenkins 容器内挂载 Docker 套接字(另外 Jenkins 需要 sudo 才能运行 Docker 命令)。因此,任何有权访问 Jenkins Web 界面的人都可以运行任何具有主机系统完全访问权限的命令(通过运行 docker 容器)。

因此,我想知道是否有人有一些想法可以使此设置更加安全。对我来说,不在 Docker 容器内运行 Jenkins(而是直接在主机系统上)似乎并不更安全,因为 Jenkins 仍然需要能够执行 Docker 命令(使用 sudo)来构建新映像,从而使 Jenkins 用户仍然能够启动任何任意容器。使用防火墙是限制可以访问 Jenkins 的 IP 的选项,但我希望可能有其他一些解决方案来降低安全风险。

编辑 我忘了提到 Jenkins 还应该能够在同一台机器上启动(新创建的)容器。

security jenkins docker

5
推荐指数
1
解决办法
1307
查看次数