使用 docker-compose(以前称为 fig)到 link 一个 cron 映像

Using docker-compose (formerly fig) to link a cron image

我正在 运行 使用 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

Docker 文件

FROM rails:onbuild

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

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

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

docker-compose 是否有办法让容器获得 shell 到 linked 容器中以执行一些命令?

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

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

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