首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google容器的编排和清理

Google容器的编排和清理
EN

Stack Overflow用户
提问于 2018-10-24 18:07:18
回答 2查看 195关注 0票数 1

简而言之,我想看看是否可以通过gcloud的create-with-container功能(或类似的)在同一台机器上运行多个Docker容器。其思想是,将有一些“工作者”容器(它做一些任意的工作)运行并完成,然后是一个“清理”容器,它随后运行,每次执行相同的任务。

较长的解释:

目前,我有一个在Google上启动在Docker容器中运行的任务的应用程序。我使用gcloud beta compute instances create-with-container <...other args...>启动VM,它运行指定的容器。我将称之为“工人”容器,它所执行的任务与我的问题无关。然而,不管“工人”容器,我想运行第二个,“清理”容器完成的第一个。通过这种方式,开发人员可以独立编写Docker容器,这些容器不必“重复”“清理”容器所做的工作。

边注

我知道,我也可以指定一个启动脚本(例如bash脚本),它启动前面描述的坞容器。但是,当我第一次尝试时,我一直遇到一些问题,在与dockerhub通信时,docker pull <image>命令会因为某种原因而超时或失败。gcloud beta compute instances create-with-container <...args...>似乎有错误处理/重试内置,这似乎是理想的。是否有一个工作片段可以在启动脚本中提供相对健壮的错误处理?

EN

回答 2

Stack Overflow用户

发布于 2018-10-25 17:14:30

据我所知,限制是每个VM实例一个容器。见局限性

票数 1
EN

Stack Overflow用户

发布于 2018-10-26 09:34:33

答案:目前不可能启动具有create-with-container功能的多个容器。

Alternative:您提到您已经尝试过用启动脚本启动容器。另一种选择是指定一个通过实例元数据进行云init配置。云-init内置到容器优化的操作系统中(与create-with-container使用的操作系统相同)。

它通过添加和启动systemd服务来工作,这意味着您可以:

  • 指定您的服务应该在其他服务之后运行:network-online.targetdocker.socket
  • 为服务指定一个重新启动策略,以便在失败时进行重试,
  • 添加一个ExecStopPost规范来运行您的清理(或者在云init配置中为它添加一个单独的服务)

这是一个可以作为起点的片段(您需要在user-data元数据键下添加它):

代码语言:javascript
复制
#cloud-config

users:
- name: cloudservice
  uid: 2000

write_files:
- path: /etc/systemd/system/cloudservice.service
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=Start a simple docker container
    Wants=network-online.target docker.socket
    After=network-online.target docker.socket

    [Service]
    ExecStart=/usr/bin/docker run --rm -u 2000 --name=cloudservice busybox:latest /bin/sleep 180
    ExecStopPost=/bin/echo Finished!
    Restart=on-failure
    RestartSec=30

runcmd:
- systemctl daemon-reload
- systemctl start cloudservice.service
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52975443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档