如何在特权模式下运行GCP Cron作业

问题描述 投票:0回答:1
我们有一个 GCP Cron 作业,它使用 docker 命令从 Google 容器注册表中提取 docker 镜像。

Cron 作业运行的映像使用 docker:dind 作为基础映像,当我尝试在本地运行该映像时,我发现在使用 docker run 命令时必须添加“--privileged”才能连接到主机码头引擎。

所以我的问题是,有没有办法在配置 Cron 作业时也以特权模式运行容器?因为如果我不这样做,就会有一个

docker: error during connect: Post "http://docker:2375/v1.24/containers/create": dial tcp: lookup docker on 10.254.133.10:53: no such host

发生错误,我猜可能与不使用特权模式有关。

提前谢谢您!

docker google-cloud-platform cron google-kubernetes-engine kubernetes-cronjob
1个回答
0
投票
此错误似乎是在与主机不同的网络命名空间中运行时发生的。

使其运行的最简单方法是使用

privileged: true

 使容器在特权模式下运行,并使用 
hostNetwork: true
 与主机共享同一网络。

示例 yaml 如下所示:

apiVersion: v1 kind: Pod metadata: name: dind spec: hostNetwork: true containers: - name: dind image: docker:dind securityContext: privileged: true
请注意,之后您可能需要登录 docker(这可能超出了这个问题的范围,但让我提供一些指导):

    简单的一次性方法是运行
  • kubectl exec -it dind -- sh
     到 ssh,然后运行 
    docker login
    。尽管此更改只会在 pod 内容器的生命周期内有效(例如,如果容器重新启动,它将丢失)。您可以使用这种方式只是为了尝试,为了更持久的方式请检查下一点。
  • 更持久的方法是将 docker run 作为 yaml 文件的一部分运行。有很多方法可以做到这一点。其中一种方法是将
  • command: ["docker", "login", "--username", "$USERNAME", "--password", "$PASSWORD"]
     添加到 yaml 文件并使用 
    secrets 传递环境变量。
© www.soinside.com 2019 - 2024. All rights reserved.