1

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

码头工人-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 链接图像,例如https://registry.hub.docker.com/u/ hamiltont/docker-cron/使用 docker-compose。

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

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

4

1 回答 1

1

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

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

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

于 2015-05-04T19:58:29.523 回答