是否可以在AWS batch上运行docker-in-docker?
我尝试过通过容器属性挂载docker socket的方法:
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
}
]
}
但是,在使用默认配置的SPOT计算环境中运行此批处理作业会生成一个立即转换为失败状态的作业,并显示状态转换原因:
Status reason
Unknown volume '/var/run/docker.sock'.
发布于 2020-12-15 23:26:44
解决方案是必须同时定义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
}
]
从内部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
在你运行你私人托管的docker容器之前。
事实证明,privileged
甚至不是必需的,这很好。
https://stackoverflow.com/questions/65307922
复制相似问题