小编Dav*_*Xia的帖子

如何从没有env vars的主机上的docker容器内获取docker主机的主机名

除了使用环境变量之外,有什么方法可以从在该主机上运行的容器内获取docker主机的主机名?我知道我可以在容器创建时将主机名作为环境变量传递给容器.我想知道如何在运行时查找它.

foo.example.com (docker host)
  bar (docker container)
Run Code Online (Sandbox Code Playgroud)

bar在docker主机中运行容器是否有办法foo.example.com获取"foo.example.com"?

编辑以添加用例:

容器将为表单的服务发现创建SRV记录

_service._proto.name. TTL class SRV priority weight port target.
-----------------------------------------------------------------
_bar._http.example.com 60 IN SRV 5000 5000 20003 foo.example.com.
Run Code Online (Sandbox Code Playgroud)

其中20003是docker主机上动态分配的端口,用于监听bar中某个固定端口的服务(docker处理从主机端口到容器端口的映射).

我的容器将运行运行状况检查以确保它已成功创建该SRV记录,因为其他docker主机上还有许多其他bar容器也会创建自己的SRV记录.

_service._proto.name. TTL class SRV priority weight port target.
-----------------------------------------------------------------
_bar._http.example.com 60 IN SRV 5000 5000 20003 foo.example.com. <--
_bar._http.example.com 60 IN SRV 5000 5000 20003 foo2.example.com.
_bar._http.example.com 60 IN SRV 5000 5000 20003 foo3.example.com.
Run Code Online (Sandbox Code Playgroud)

运行状况检查将循环查找上面第一个SRV记录,因此需要知道其主机名.

在旁边

我正在使用Helios并且发现它为我添加了一个env var,我可以从中获取主机名.但我只是好奇,以防我使用没有Helios的码头工具.

docker

47
推荐指数
7
解决办法
7万
查看次数

如何使maven发布插件跳过测试?

我在Spotify的docker-clientmvn release:prepare -Darguments="-Dmaven.test.skip=true -DskipTests"的主要结账时运行.但我不能让maven的发布插件跳过测试.为什么maven在这种情况下不尊重CLI标志?

我也很好奇是什么原因导致release插件执行surefire-plugin.没有指定的surefire-plugin pom.xml.

mvn --version

Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T12:29:23-05:00)
Maven home: /usr/local/Cellar/maven/3.2.5/libexec
Java version: 1.7.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.2", arch: "x86_64", family: "mac"
Run Code Online (Sandbox Code Playgroud)

maven maven-release-plugin

25
推荐指数
3
解决办法
2万
查看次数

重建索引后如何正常重启Sphinx搜索守护进程

我已经重新编制了我的Sphinx搜索索引/usr/local/sphinx/bin/indexer --all --rotate,并将原始索引输出文件重命名为其他内容.只需更改传递的索引参数就$sphinx->Query($query, $index);不会返回任何结果.

我怀疑守护进程不知道新的索引文件存在.所以我跑了

sudo /usr/local/sphinx/bin/searchd

再次尝试重新启动它.但它扔了

FATAL: failed to lock pid file '/usr/local/sphinx/var/log/searchd.pid': Resource temporarily unavailable (searchd already running?)

我不得不kill使用搜索守护进程的2个进程并再次启动它以从新的索引文件中获取.是否有一种优雅的方式来重新启动它?

full-text-search sphinx

14
推荐指数
2
解决办法
4万
查看次数

GKE 元数据服务器如何在 Workload Identity 中工作

我最近一直在使用GKE Workload Identity功能。我有兴趣更详细地了解该gke-metadata-server组件的工作原理。

  1. GCP 客户端代码(gcloud或其他语言 SDK)适用于 GCE 元数据方法
  2. http://metadata.google.internal/path
  3. (猜测)GKE_METADATA_SERVER我的节点池上的设置将其配置为解析到该gke-metadata-server节点上的pod。
  4. (猜测)gke-metadata-server带有 --privileged 和主机网络的pod 可以确定源(pod IP?)然后查找 pod 及其服务帐户以检查iam.gke.io/gcp-service-account注释。
  5. (猜测)代理使用 pod 的“伪”身份集(例如[PROJECT_ID].svc.id.goog[[K8S_NAMESPACE]/[KSA_NAME]])调用元数据服务器,以获取在其 Kubernetes 服务帐户上注释的服务帐户的令牌。
  6. 如果此帐户对服务帐户具有令牌创建者/工作负载 ID 用户权限,则来自 GCP 的响应可能是成功的并且包含令牌,然后将令牌打包并设置回调用 Pod,以便对其他 Google API 进行身份验证调用。

我想现在对我来说主要的难题是验证调用 Pod 的身份。最初我认为这会使用 TokenReview API,但现在我不确定 Google 客户端工具如何知道使用安装到 pod 中的服务帐户令牌......

编辑后续问题:

Q1:在第 2 步和第 3 步之间,是否metadata.google.internal通过GKE_METADATA_SERVER节点池上的设置将请求路由到 GKE 元数据代理?

Q2:元数据服务器pod为什么需要主机联网?

问题 3:在此处的视频中:https : //youtu.be/s4NYEJDFc0M?t=2243假定 pod 进行 GCP …

google-cloud-platform kubernetes google-kubernetes-engine google-iam

10
推荐指数
1
解决办法
3413
查看次数

如何在Yii Framework中设置基本URL

当我做

print_r(Yii::app()->request->baseUrl)
Run Code Online (Sandbox Code Playgroud)

我得到一个空字符串.Yii论坛上的帖子说默认为空白.如何更改其默认值以便我可以使用绝对URL?

php yii yii-routing

9
推荐指数
2
解决办法
7万
查看次数

使用 k8s.io/client-go 库更改 kubernetes 部署时获得通知的最佳方式是什么?

语境

我正在编写一个脚本,该脚本使用k8s.io/client-go库(此处godocs)来操作部署。特别是,我想为集群中的每个部署添加一个标签选择器。部署标签选择器是不可变的。所以我的做法是:

  1. 创建每个部署的副本,唯一的区别是名称后缀为“-temp”。这是为了最大限度地减少现有部署的停机时间。
  2. 删除原始部署。
  3. 重新创建原始部署,唯一的区别是额外的标签选择器。
  4. 删除临时部署。

我不能只使用 client-go 库按顺序执行步骤 1-4,因为我只想在 API 服务器认为上一步完成时进入下一步。例如,我不想执行第 3 步,直到 API 服务器说原始部署已被删除。否则,我将收到具有相同名称的 Deployment 已存在的错误。

使用 client-go 库检测何时创建和删除部署并附加回调函数的最佳方法是什么?我遇到了以下软件包。

但我不确定它们之间有什么区别以及使用哪一个。

在这里阅读了watchInformer 的例子。这是两个 相关的SO 问题。

更新

似乎watch提供了一种较低级别的方法来监视资源的更改并接收有关更改的事件。似乎使用SharedInformerFactory创建 SharedInformer 是要走的路。

到目前为止我有

import (
    "encoding/json"
    "errors"
    "flag"
    "fmt"
    "io/ioutil"
    "k8s.io/api/apps/v1"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/informers"
    "k8s.io/client-go/kubernetes"
    typedv1 "k8s.io/client-go/kubernetes/typed/apps/v1"
    "k8s.io/client-go/tools/cache"
    "path/filepath"
    "strings"

    // We need this import to load the …
Run Code Online (Sandbox Code Playgroud)

go kubernetes client-go

7
推荐指数
1
解决办法
3189
查看次数

如何在1 IF中检查PHP数组的值而没有索引偏移量错误

是否可以在1个IF语句中检查PHP数组中某个键的值?现在,为了不抛出索引偏移错误,我必须检查密钥是否已设置,然后检查其值.

if (isset($array[$key]))
{
    if ($array[$key] == $x)
    {
        // do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

(对不起,不小心把它放在第一个IF中)

php arrays

6
推荐指数
1
解决办法
9735
查看次数

在终端中恢复 Vim 会话后没有语法高亮

我正在使用这个Vim 配置。我使用以下 2 个命令保存和恢复 Vim 会话:

 :mksession! ~/.vim_session
 :source ~/.vim_session                                                                                                                                   
Run Code Online (Sandbox Code Playgroud)

恢复会话后没有语法突出显示。我怎样才能解决这个问题?

我的 Vim 版本:

VIM - Vi IMproved 7.3.462 (2010 Aug 15, compiled Mar 26 2012 21:45:48)
MacOS X (unix) version
Included patches: 1-462
Run Code Online (Sandbox Code Playgroud)

vim terminal

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

MAMP的php交互模式坏了吗?

我在Mac OS X Lion 10.7.3上使用MAMP版本2.0.5(2.0.5).当我尝试使用php的交互模式时

/Applications/MAMP/bin/php/php5.3.6/bin/php -a
Run Code Online (Sandbox Code Playgroud)

它会显示Interactive mode enabled然后挂起.没有命令可行.

这个论坛帖子说其他人发现它已经坏了.有没有人找到修复?

php mamp

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

如何将文件从一个git分支复制到另一个git分支并保存为不同的文件?

我想将文件从一个git分支复制到另一个git分支,但将其另存为不同的文件名.我知道我可以用同样的名字复制它.在结账时有没有办法重命名?

git checkout otherbranch myfile.txt
Run Code Online (Sandbox Code Playgroud)

git

3
推荐指数
1
解决办法
95
查看次数

如何使用jinja模板获取Google App Engine python中的当前网址

我正在使用带有Jinja2模板的Google App Engine for Python.是否有模板标记来获取当前页面的URL.或者我是否必须将URL作为变量传递给视图代码中的模板?

python google-app-engine jinja2

3
推荐指数
1
解决办法
2731
查看次数

如何检查声明为map[string]interface{}的变量实际上是map[string]string?

我有一个变量需要是 astringmap[string]string(将从 JSON 反序列化)。所以我将其声明为interface{}. 我如何检查该值是否为map[string]string

这个问题How to check interface is a map[string]string in golang几乎回答了我的问题。但接受的答案仅在变量声明为map[string]stringnot 且变量为 的情况下才有效interface{}

package main

import (
    "fmt"
)

func main() {

    var myMap interface{}
    myMap = map[string]interface{}{
        "foo": "bar",
    }
    _, ok := myMap.(map[string]string)
    if !ok {
        fmt.Println("This will be printed")
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅https://play.golang.org/p/mA-CVk7bdb9

不过我可以使用两种类型断言。一张在地图上,一张在地图上的值。

package main

import (
    "fmt"
)

func main() {
    var myMap interface{}
    myMap = map[string]interface{}{
        "foo": …
Run Code Online (Sandbox Code Playgroud)

go

3
推荐指数
1
解决办法
4337
查看次数