我有一个在Docker容器中运行的Django站点,它使用docker-compose来管理各种容器(数据库,nginx等)。我使用Django manage.py
命令将一些Django任务用于站点维护。它们的命令采取以下形式:
manage.py updateflickr --settings=mysite.myproj.prod
在docker-compose下运行,它们看起来像:
docker-compose run --rm app manage.py updateflickr --settings=mysite.myproj.prod
我的问题是,当我尝试使用Fabric运行这些相同的命令时,似乎没有使用我指定的设置文件。 Django返回数据库连接错误,这通常意味着它没有获取正确的数据库信息,或者在这种情况下是mysite.myprod.prod
中指定的连接
我的Fabric文件如下:
import os
from fabric.api import *
env.hosts = ['myserver.com']
env.user = "myuser"
env.key_filename = '~/.ssh/do_rsa'
env.shell = '/bin/bash -c'
@task
def updateflickr():
run('docker-compose run --rm app python manage.py updateflickr --settings=mysite.myproj.prod')
我也在我的DJANGO_SETTINGS_MODULE
中设置了docker-compose.yml
环境变量,但得到了相同的结果。最后,我尝试的最后一件事是将命令包装在shell脚本中。相同的结果 - 如果我在服务器上运行,它运行正常。如果我从Fabric运行shell脚本,我会遇到数据库连接问题。
更新
我不太确定这是关于Fabric的问题,然后是关于docker-compose如何运行的问题。如果我尝试以下内容:
ssh -t me@myserver.com 'docker-compose run --rm app python manage.py updateflickr --settings=mysite.myproj.prod'
我仍然得到相同的结果。只需发送命令就可以加载交互式shell。我尝试使用带有和不带ssh
标志的-t
,因为docker-compose可能需要pty
有效。