Docker Swarm 不尊重凭证规范?

Docker Swarm 不尊重凭证规范?

我在 Windows Server 2022 上托管了一个 Docker 集群。我创建了一个credentialspec文件,因为我需要该服务使用甲基磺酸。我还定义了一个撰写文件来启动我的服务:

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>版本 - 容器启动正常,但和以前一样无法访问网络共享。

知道什么地方出了问题吗?

答案1

我显然错过了关于 Compose 文件结构文档的一个关键部分(特别是这部分)。

最终定义应如下所示:

version: '3.8'

services:
  agent:
    image: privaterepo.local/devops-agent-win-generic:latest
    hostname: '${AZPOOL}_Generic-{{.Task.Slot}}'
    user: "NT AUTHORITY\\NETWORK SERVICE"
    credential_spec:
      config: credspec
    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]
configs:
  credspec:
    external: true

启动上述操作之前,需要通过(应包含原始 credspec 文件 JSON)credspec在 swarm 中创建配置。docker config create

相关内容