当前位置: 首页 > 面试题库 >

在Docker容器中创建django超级用户而不输入密码

邹祺然
2023-03-14
问题内容

我正在尝试在具有结构的Django Docker容器中创建createsuperuser。

要在django中创建超级用户,我需要在django交互模式下运行它:

./manage.py createsuperuser

并且因为我想使其在结构脚本中运行,所以我发现 命令可以避免输入密码

echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'pass')" | ./manage.py shell

然后,将其与 “ docker exec” 放在一起,以在我的django容器中运行

docker exec container_django echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'pass')" | ./manage.py shell

问题出在linux管道上,管道(|)在其左侧的所有内容(包括docker exec)在其右侧(./manage.py shell)

考虑到将所有这些垃圾放入结构中,这不仅是困难的部分,这意味着它们两端都需要加引号。这将使整个事情变得非常紧急。

fabric run:
run("docker exec container_django {command to create django super user}")

我仍在努力如何至少在结构运行中进行垃圾工作,但是我不知道该怎么做。


问题答案:

我建议添加一个新的管理命令,如果不存在用户,该命令将自动创建一个超级用户。

查看我在https://github.com/dkarchmer/aws-eb-docker-
django
创建的小示例。特别是,请看我如何python manage.py initadmin运行:

class Command(BaseCommand):

    def handle(self, *args, **options):
        if Account.objects.count() == 0:
            for user in settings.ADMINS:
                username = user[0].replace(' ', '')
                email = user[1]
                password = 'admin'
                print('Creating account for %s (%s)' % (username, email))
                admin = Account.objects.create_superuser(email=email, username=username, password=password)
                admin.is_active = True
                admin.is_admin = True
                admin.save()
        else:
            print('Admin accounts can only be initialized if no Accounts exist')

(请参阅身份验证/管理/命令)。

您可以看到Dockerfile然后如何仅运行CMD到runserver.sh,该文件基本上可以运行

python manage.py migrate --noinput
python manage.py initadmin
python manage.py runserver 0.0.0.0:8080

显然,这是假定管理员在服务器启动后立即更改密码。这可能对您来说不够好。



 类似资料:
  • 问题内容: 我正在尝试在具有结构的Django Docker容器中创建createsuperuser。 要在django中创建超级用户,我需要以django交互模式运行它: 并且因为我想使其在结构脚本中运行,所以我发现 此 命令可以避免输入密码 然后,将其与 “ docker exec” 放在一起,以在我的django容器中运行它 问题出在linux管道上,管道(|)在其左侧的所有内容(包括doc

  • 问题内容: 我想在一个简单的Docker容器中运行Django。 首先,我使用Docker-file构建了我的容器。没有什么特别的(只有FROM,RUN和COPY命令) 然后我用命令运行容器 输入我的容器: 运行Django服务器: 得到了: 但是当我转到127.0.0.1:8000时,我什么也看不到: 没有Nginx或其他工作服务器。 我究竟做错了什么? 更新1(Dockerfile) 问题答案

  • 问题内容: models.py 我想在一定条件下将默认数据插入数据库中,这应该在通过注释创建超级用户时发生。 我不知道使用django是可行的,但这是必要条件。我尝试了上面的代码。创建超级用户时收到错误“ AttributeError:’User’对象没有属性’location’”。 我需要的样品如下 问题答案: 尝试将此功能用作信号处理程序: 向模型字段添加选择: Django CharFiel

  • DockerFile: init.sql: 据我所知,从图书馆。..从docker hub中拉出postgres图像,副本将我的init.sql脚本推入入口点,所以不需要大的dockerfile,对吗? 日志中的错误 从评论中尝试:

  • 问题内容: django中是否有一个类似于@login_required的装饰器,它也可以测试用户是否是超级用户? 谢谢 问题答案: 使用装饰器:

  • 问题内容: 我想知道是否有人尝试使用默认键空间构建cassandra docker镜像,但我尝试在BUILD时间内完成该操作,但由于cassandra不在该阶段运行,因此无法正常工作。这类似于以下内容: 我的新方法是从入口点脚本执行此操作,但是,如果其他人有更好的主意,我现在想。 快乐运输:D 问题答案: 今天解决了这个问题。构建映像,该映像将在修改之前附加一个修改过的默认Cassandra 将所