简而言之,我想看看是否可以通过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...>似乎有错误处理/重试内置,这似乎是理想的。是否有一个工作片段可以在启动脚本中提供相对健壮的错误处理?
发布于 2018-10-25 17:14:30
据我所知,限制是每个VM实例一个容器。见局限性。
发布于 2018-10-26 09:34:33
答案:目前不可能启动具有create-with-container功能的多个容器。
Alternative:您提到您已经尝试过用启动脚本启动容器。另一种选择是指定一个通过实例元数据进行云init配置。云-init内置到容器优化的操作系统中(与create-with-container使用的操作系统相同)。
它通过添加和启动systemd服务来工作,这意味着您可以:
network-online.target和docker.socket这是一个可以作为起点的片段(您需要在user-data元数据键下添加它):
#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.servicehttps://stackoverflow.com/questions/52975443
复制相似问题