【问题标题】:Using docker-compose (formerly fig) to link a cron image使用 docker-compose(以前的 fig)链接 cron 映像
【发布时间】:2015-07-14 02:57:28
【问题描述】:

我正在使用 docker-compose(以前的 fig)在 docker 中运行一个简单的 rails 应用程序,如下所示:

docker-compose.yml

db:
  image: postgres
  volumes:
    - pgdata:/var/lib/postgresql/data

web:
  build: .
  command: bundle exec rails s -b 0.0.0.0
  volumes:
    - .:/usr/src/app
  ports:
    - "3011:3000"
  links:
    - db

Dockerfile

FROM rails:onbuild

我需要运行一些定期维护脚本,例如数据库备份、将站点地图 ping 到搜索引擎等。

我不想在我的主机上使用 cron,因为我更喜欢保持应用程序的可移植性,我的想法是使用 docker-compose 使用 docker-compose 链接图像,例如 https://registry.hub.docker.com/u/hamiltont/docker-cron/

rails 官方镜像没有启用 ssh,所以我不能只让 cron 容器通过 ssh 进入 Web 容器并运行脚本。

docker-compose 是否有办法让容器将 shell 放入链接的容器中以执行某些命令?

【问题讨论】:

    标签: ruby-on-rails cron docker fig docker-compose


    【解决方案1】:

    您实际上想对您的容器做什么?如果您需要从容器的文件系统访问某些对象,您应该只将卷挂载到辅助容器(考虑--volumes-from 选项)。

    容器之间的任何 SSH 交互都被认为是一种不好的做法(至少从 docker 1.3 开始,当 docker exec 已经实现时)。在容器内运行多个进程(例如,smth,但在您的情况下是 postgresrails)将导致大量开销:为了拥有 sshdrails,您必须部署类似supervisord

    但是,如果您确实需要在容器之间提供某种非标准交互并且您确定确实需要它,我建议您使用功能齐全的 docker 客户端库之一(例如 docker-py) .它将允许您以可编程的方式启动docker exec

    【讨论】:

    • 感谢您提供有用的信息并将我指向 docker-py。我只需要运行一些简单的计划任务,例如每周一次的 sitemap.xml 对搜索引擎的 ping、每日数据库转储以及将转储上传到亚马逊 S3、每周向注册用户发送电子邮件摘要......这正是我会设置的常见内容非 docker 环境中的 cron 作业。
    • @TopperH 尝试尝试以下设计:将/var/run/docker.sock 安装到您的cron 容器并在其中安装Docker。您将能够从 docker 容器执行 docker 命令。如果 Docker CLI 不够用,也可以在 cron 中安装首选的 docker 客户端库(如 docker-py)。
    • 这听起来很有趣。我会再等一段时间再接受你的回答,以防万一有“docker-compose ready”解决方案。
    • @TopperH,好的,请慢慢来:)
    • 这个解决方案是不是还是和原来一样的问题——它依赖于主机的 cron 守护进程?
    猜你喜欢
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2023-03-09
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    相关资源
    最近更新 更多