AWS Batch 上的 Docker 中的 Docker?

qww*_*wwq 3 docker aws-batch

是否可以在AWS批处理上运行docker-in-docker?

我尝试过通过容器属性安装docker套接字的方法:

container_properties = <<CONTAINER_PROPERTIES
 {
    "command": ["docker", "run", "my container"],
    "image": "docker/compose",
    "jobRoleArn": "my-role",
    "memory": 2000,
    "vcpus": 1,
    "privileged": true,
    "mountPoints": [
      {
        "sourceVolume": "/var/run/docker.sock",
        "containerPath": "/var/run/docker.sock",
        "readOnly": false
      }
    ]
 }
Run Code Online (Sandbox Code Playgroud)

但是,在具有默认配置的 SPOT 计算环境中运行此批处理作业会产生一个立即转换为 FAILED 状态的作业,状态转换原因如下:

Status reason
Unknown volume '/var/run/docker.sock'.
Run Code Online (Sandbox Code Playgroud)

qww*_*wwq 6

解决方案是必须定义volumes两者。mountPoints例如,以下容器属性有效:

 {
    "command": ["docker", "run", "<my container>"],
    "image": "docker/compose",
    "jobRoleArn": "my-role",
    "memory": 2000,
    "vcpus": 1,
    "privileged": false,
    "volumes": [
      {
        "host": {
          "sourcePath": "/var/run/docker.sock"
        },
        "name": "dockersock"
      }
    ],
    "mountPoints": [
      {
        "sourceVolume": "dockersock",
        "containerPath": "/var/run/docker.sock",
        "readOnly": false
      }
    ]
Run Code Online (Sandbox Code Playgroud)

从内部 docker 可以正常访问您的私有 ECR 映像,但是从外部 docker 对 ECR 的身份验证不会继续进行,因此您需要使用以下命令重新进行身份验证

aws ecr get-login-password \
    --region <region> \
| docker login \
    --username AWS \
    --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

在运行私有托管的 docker 容器之前。

事实证privileged明甚至不需要,这很好。