如何为Dataflow运行的容器配置特权模式或添加CAP_SYS_PTRACE等能力
Dataflow容器特权模式/指定能力配置方案
你可以通过以下两种官方支持的方式实现自动配置,无需手动登录Worker实例修改:
方案1:使用Worker启动脚本配置(推荐,改动最小)
- 提前编写启动脚本,完成Docker运行参数的全局配置,示例脚本逻辑如下:
#!/bin/bash # 给Docker默认添加SYS_PTRACE能力 cat > /etc/docker/daemon.json <<EOF { "default-cap-add": ["SYS_PTRACE"] } EOF # 重启Docker服务生效 systemctl restart docker
- 将脚本上传到你的GCS存储桶,例如路径为
gs://my-cloud-storage-bucket/scripts/docker_cap_config.sh - 提交Beam任务时新增
--worker_startup_script_url参数即可,完整提交命令参考:
python3 -m apache_beam.examples.complete.top_wikipedia_sessions \ --region us-central1 \ --runner DataflowRunner \ --project my_project \ --temp_location gs://my-cloud-storage-bucket/temp/ \ --output gs://my-cloud-storage-bucket/output/ \ --worker_startup_script_url gs://my-cloud-storage-bucket/scripts/docker_cap_config.sh
- 所有Worker实例启动时会自动执行该脚本修改Docker配置,后续启动的业务容器会自动继承配置的权限。如果需要开启特权模式,可在脚本的daemon.json中添加
"privileged": true配置即可。
方案2:配合自定义Worker镜像使用
如果你的场景还需要其他容器自定义修改,可以基于官方Beam SDK镜像构建自定义业务镜像,提交任务时通过--worker_harness_container_image参数指定自定义镜像地址,再配合上述启动脚本的权限配置即可。
验证方法
任务启动后任选一个Worker实例,执行docker inspect <容器ID> | grep CapAdd即可确认权限配置是否生效。
内容的提问来源于stack exchange,提问作者Jong
相关产品推荐
相关产品推荐

