我的docker镜像是在Jenkins CI服务器上构建的,并被推送到我们的私有Docker Registry.我的目标是使用docker-compose配置环境,它始终启动图像的最初构建状态.
我目前在不同的机器上使用docker-compose 1.3.2以及1.4.0,但我们之前也使用过旧版本.
我总是使用docker-compose pull && docker-compose up -d命令从注册表中获取新图像并启动它们.我相信我的首选行为在某个时间点按预期工作,但从那时起docker-compose up开始重新运行先前停止的容器,而不是每次都启动最初构建的映像.
有没有办法摆脱这种行为?这种方式可能是在docker-compose.yml配置文件中连接的,在每次调用时都不依赖于"忘记"命令行中的某些内容吗?
PS.除了找到实现目标的方法之外,我还想更多地了解这种行为的背景.我认为Docker的基本思想是构建一个不可变的基础架构.docker-compose的当前行为似乎与这种方法完全冲突..或者我在这里错过了一些观点?
我们将私有docker注册表更新为官方Registry 2.0.此版本现在可以删除由标签标识的docker图像(请参阅https://docs.docker.com/registry/spec/api/#deleting-an-image),但我仍然没有看到清除旧图像的方法.
由于我们的CI服务器不断生成新图像,我需要一种方法来删除私有注册表中不再由命名标记标识的所有图像.
如果没有内置的方法来实现这一点,我认为自定义脚本可能有效,但我没有看到v2 API方法列出图像的所有存储的标签.
如何保持我的私人注册表清洁?任何提示?
我有一个相当复杂的Java EE项目,可以从Maven构建得很好.在将其导入IDEA后,我已将前端WAR和后端EAR的工作部署设置为本地Weblogic 12c服务器.该项目还有几个"常见"工件打包为jar,并由前端和后端工件使用.对于部署,我使用爆炸的工件来节省包装/拆包的时间,一切正常,直到那一点.
在开发过程中,我编辑了一些Java源代码,并尝试将更新的工件重新部署到正在运行的Weblogic中.我按Shift + F10,选择重新部署工件,我看到IDEA构建项目,项目在服务器上重新部署,而且通常情况下,我没有看到任何最近的更改.即使我明确选择Rebuild项目然后尝试重新部署工件,也不会在服务器上看到任何更改.使更改出现在已部署工件中的唯一安全方法是从命令行调用maven调用package目标,然后从IDEA重新部署.(没有安装JRebel,正在IDE或Weblogic中使用,我希望保持这种状态).
这是IDEA的预期行为吗?这可能是我们项目特有的东西还是全球性的东西?IDEA是否应该能够发现哪些项目需要重建和重新打包,然后将EAR/WAR工件正确地重新部署到服务器?是否需要我方帮助实现这一目标?
我们正在大量使用Terraform进行AWS Cloud配置.我们的基础terraform结构如下所示:
?? modules
??? x
??? y
?? environments
??? dev
? ??? main.tf
? ??? output.tf
? ??? variables.tf
??? uat
? ??? main.tf
? ??? output.tf
? ??? variables.tf
??? prod
??? main.tf
??? output.tf
??? variables.tf
Run Code Online (Sandbox Code Playgroud)
当我们达到我们有许多模块和许多环境的程度时,代码重复现在变得更加严重,我们希望尽可能多地摆脱它.
我们目前主要关注的是output.tf文件 - 每次扩展现有模块或添加新模块时,我们都需要为它设置特定于环境的配置(这是预期的),但我们仍然需要复制/粘贴所需的部件into output.tf输出配置的结果(如IP地址,AWS ARN等).
有没有办法摆脱重复的output.tf文件?我们是否可以在模块本身中定义所需的输出,并在我们为特定环境运行terraform时查看所有已定义的输出?
我在 AWS EKS 上的 kubernetes pod 中提供面向外部的 REST GET API 服务。我为此服务配置了一个 ALB Ingress,它强制执行 Cognito 用户池身份验证。Cognito 配置为Authorization code grant启用openidOAuth 范围。
如果我从浏览器调用 REST API,我会被重定向到 Cognito 登录页面。在此处的表单上成功进行身份验证后,我可以正常访问我的 REST GET API。这可行,但这不是我想要实现的目标。
相反,Bearer在成功通过身份验证后,我需要使用令牌。因此,首先我使用 Postman 调用https://cognito-idp.ap-southeast-1.amazonaws.com并发出以下请求:
"AuthParameters" : {
"USERNAME" : "<email>",
"PASSWORD" : "<mypass>",
"SECRET_HASH" : "<correctly calculated hash>"
},
"AuthFlow" : "USER_PASSWORD_AUTH",
"ClientId" : "<cognito user pool id>"
}
Run Code Online (Sandbox Code Playgroud)
我得到了一个成功的回复,例如:
"AuthenticationResult": {
"AccessToken": "...",
"ExpiresIn": 3600,
"IdToken": "...",
"RefreshToken": "...",
"TokenType": "Bearer"
},
"ChallengeParameters": {}
} …Run Code Online (Sandbox Code Playgroud) amazon-web-services oauth-2.0 amazon-cognito kubernetes kubernetes-ingress
据我所知,入站 REST 路径参数会自动映射到 Camel 标头。我怀疑这个机制可能会被利用,覆盖路由工作可能需要的 Camel 标头(例如Host出站 CXFRS 端点的标头),或者至少与它们发生冲突。
为什么 Camel 不完全独立于 Camel 标头来处理请求的 REST 路径参数,而在许多情况下,Camel 标头对于正确的 Camel 组件行为是绝对必需的?如何避免两者使用相同名称发生冲突,或者在最坏的情况下避免这成为一个安全问题?
我正在计划一个简单的工作流程(右侧蓝色显示),该工作流程应接收属于同一订单的货件,并在收集所有货件后继续该流程。
收货是通过REST进行的,我计划使用作为请求一部分的order_id与正确的工作流实例进行关联。REST服务正在群集中运行,因此此时无法进行VM中锁定。
我看到此设计存在两个严重问题:
并发入站货运请求将无法关联,因此它们将同时启动多个工作流实例
即使流程一旦成功启动,当同时发货请求尝试更新同一工作流实例的变量时,Camunda也会引发并发修改异常
我如何设计这种情况来避免这些问题?
docker ×2
activiti ×1
apache-camel ×1
bpmn ×1
camunda ×1
deployment ×1
devops ×1
java ×1
java-ee ×1
kubernetes ×1
oauth-2.0 ×1
rest ×1
terraform ×1
workflow ×1