我在 Windows Server 2022 上托管了一个 Docker 群。我创建了一个credentialspec
文件,因为我需要该服务来使用gMSA。我还定义了一个组合文件来启动我的服务:
version: '3.8'
services:
agent:
image: privaterepo.local/devops-agent-win-generic:latest
hostname: '${AZPOOL}_Generic-{{.Task.Slot}}'
user: "NT AUTHORITY\\NETWORK SERVICE"
security_opt:
- "credentialspec=file://domain_devopsagent.json"
environment:
AZP_URL: ${AZURL}
AZP_POOL: ${AZPOOL}
AZP_TOKEN: ${AZTOKEN}
AZP_ONCE: ${AZONCE:-false}
AZP_REMOVE: ${AZREMOVE:-true}
deploy:
replicas: 2
placement:
constraints: [node.platform.os == windows]
这会很好地启动容器(没有错误),并且容器似乎NETWORK SERVICE
按预期运行,但是它们无法按预期访问网络共享。
如果我手动运行容器,那么容器确实可以访问网络共享。
docker run --rm -it --user "NT AUTHORITY\NETWORK SERVICE" --security-opt "credentialspec=file://domain_devopsagent.json" privaterepo/devops-agent-win-generic:latest
这使我相信组合定义或 Docker Swarm 如何处理组合定义存在问题。
我也尝试过使用该credentialspec=raw://<json>
版本——容器启动正常,但和以前一样无法访问网络共享。
知道出了什么问题吗?
我显然错过了有关撰写文件结构的文档的关键部分(特别是这一部分)。
最终定义应如下所示:
在启动上述
credspec
配置之前,需要通过docker config create
(应包含原始的 credspec 文件 JSON)在 swarm 中创建配置。