我想使用分支名称作为标记来定义 docker 映像名称的变量,如文档https://docs.gitlab.com/ce/ci/docker/using_docker_build.html中所定义:
variables:
CONTAINER_NAME: myimage:$CI_COMMIT_REF_NAME
CONTAINER_PUSH_NAME: myrepo:5000/$CONTAINER_NAME
Run Code Online (Sandbox Code Playgroud)
但是,当我输出 CONTAINER_PUSH_NAME 时,我得到:
myrepo:5000/myimage:$CI_COMMIT_REF_NAME
这意味着,我自己的变量被扩展,但预定义的变量没有扩展,尽管它们在脚本执行时可用,因为当我 时echo $CI_COMMIT_REF_NAME,我会按预期获得分支名称。
是否可以使用预定义变量作为我定义的变量的一部分,或者文档具有误导性?
是否可以为私有 docker 存储库定义别名?
我在服务器 docker.internal.example.com 上有一个存储库供内部使用,但外部不可用。现在我希望能够将图像推送到另一个存储库 docker.distr.example.com,该存储库可用于客户端安装。
一切都会好起来的,如果最终图像不依赖于中间图像,在 FROM 中引用,例如:
FROM docker.internal.example.com:5000/java/jetty-jdk8:latest
Run Code Online (Sandbox Code Playgroud)
该图像将无法从 docker.distr.example.com 中提取,因为对 java/jetty-jdk8 的引用将无法解析(docker.internal.example.com 将不可见)。
理想情况下,我希望能够简单地写
FROM java/jetty-jdk8:latest
Run Code Online (Sandbox Code Playgroud)
但我知道出于某种奇怪的原因它被 docker 开发人员认为是不安全的,所以这样的事情就足够了:
FROM DOCKER-PRIVATE:5000/java/jetty-jdk8:latest
Run Code Online (Sandbox Code Playgroud) 我将我的keycloak服务器放置在apache代理后面:
ProxyRequests On
ProxyVia On
ProxyPreserveHost On
SSLProxyEngine On
SSLProxyCheckPeerCN on
SSLProxyCheckPeerExpire on
<LocationMatch "/auth/">
ProxyPass http://keycloak:8090/auth/ Keepalive=On
</LocationMatch>
ProxyPassReverse "/auth/" "http://keycloak:8090/auth/"
Run Code Online (Sandbox Code Playgroud)
我已经成功地告诉我在JavaScript端的密钥斗篷使用/ auth进行身份验证:
{
"realm" : "local",
"auth-server-url" : "/auth",
"ssl-required" : "external",
"resource" : "client-local",
"public-client" : true
}
Run Code Online (Sandbox Code Playgroud)
我已经成功登录,但是在发出服务器请求后,过滤器(org.keycloak.jaxrs.JaxrsBearerTokenFilterImplfrom keycloak-jaxrs-oath-client-4.0.0.FINAL)引发异常:
WWW-Authenticate:Bearer realm =“ local”,error =“ invalid_token”,error_description =“无效的令牌发行者。预期为' http:// keycloak:8090 / auth / realms / local ',但为' http:// localhost / auth / realms / local '“
我在这里想念的是什么?我期望反向代理对于密钥斗篷是透明的...我也无法在密钥斗篷管理面板中找到将本地主机添加到有效发行人的选项...
如何使该设置生效?
当我创建秘密并Rancher选择它应该在所有命名空间中可见时,它会创建一个不带namespace标签且带有 的秘密namespaceId: null。
没有的话如何创造这样的秘密Rancher?当我使用 时kubectl,它总是将其绑定到命令上下文中的命名空间。
Oracle Java和OpenJDK实现是否com.sun.net.httpserver完全兼容?当我在Oracle Java上进行开发但为OpenJDK(docker)发货时,应该期望出现一些问题吗?
Eclipse警告我使用“受限”软件包,这让我有些担心,但是,Eclipse的警告在很多领域都存在缺陷(这是我日常生活中最突出的警告)。
当前立场(Java 8)是否有理由阻止第一行使用此软件包?如果有的话,这对于Oracle与OpenJDK还是相关的,或者它们与该软件包完全兼容?
我正在 LiquiBase 中开发一个带有数据库版本控制的系统。该系统仍处于 pre-alpha 开发阶段,有许多更改已被其他更改(删除表、添加和删除列)还原或补充。
当前更改集反映了整个开发历史,其中包含许多失败的实验,并且在初始化数据库时推出了这一整体。
因为没有发布版本,我可以从头开始并在单个 XML 变更集中提取实际的数据库状态。
有没有办法告诉 LiquiBase 将所有更改集合并到一个文件中,或者唯一的方法是手动?
根据https://kubernetes.io/docs/tasks/debug-application-cluster/get-shell-running-container/ 中的说明,我正在尝试使用 Kubectl 登录正在运行的容器,但我失败了:
kubectl exec -it mycontainer -- /bin/bash
Run Code Online (Sandbox Code Playgroud)
无法使用 TTY - 输入不是终端或正确类型的文件 rpc 错误:代码 = 2 desc = oci 运行时错误:exec 失败:container_linux.go:247:启动容器进程导致“exec:\”D:/ Applications/Git/usr/bin/bash\": stat D:/Applications/Git/usr/bin/bash: no such file or directory"
命令以退出代码 126 终止
看起来 kubectl 试图在我的机器上执行 bash,这完全不是我想要实现的。
我可以执行没有空格的命令:
$ kubectl exec mycontainer 'ls'
lib
start.sh
Run Code Online (Sandbox Code Playgroud)
但没有:
$ kubectl exec mycontainer 'ls .'
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"ls .\": executable file not found in …Run Code Online (Sandbox Code Playgroud) 如果有 2 个作业在同一路径中包含工件,并且这两个作业都是同一作业的依赖项,Gitlab CI 会如何表现?
job1:
stage: stage1
artifacts:
paths:
- samedir
job2:
stage: stage1
artifacts:
paths:
- samedir
job3:
stage: stage2
dependencies:
- job1
- job2
Run Code Online (Sandbox Code Playgroud)
我在 gitlab 文档中找不到示例或预期的行为。
行为是确定性的吗?如果 job1 和 job2 将相同的文件放在相同的目录中,那么 job2 的工件是否会因为它们在依赖项中定义的顺序而覆盖 job1 中的文件?
什么触发初始化容器运行?
编辑部署描述符(或使用 helm 更新它),例如更改图像标签,是否会触发 init 容器?
删除 pod 会触发 init 容器吗?
将副本集减少为空然后增加它会触发 init 容器吗?
是否可以手动触发 init 容器?