gpt4 book ai didi

django - django 项目中拒绝 docker 权限的 bash 脚本

转载 作者:太空宇宙 更新时间:2023-11-03 17:03:57 24 4
gpt4 key购买 nike

我正在学习 docker 并在我的 Django 项目中实现了 docker,目前,它运行良好!完全没有问题

现在我试图使一些命令易于运行,这就是我编写 shell 脚本的原因。

因为,我厌倦了写这个太长的命令:

$ docker-compose run web python /code/manage.py migrate --noinput
$ docker-compose run web python /code/manage.py createsuperuser

和上面一样,为了避免写冗长的命令,我只写了一个 shell 脚本,如下所示:

manage.sh 是shell脚本文件

#!/bin/bash
docker-compose run web python /code/manage.py $1

后来我尝试使用我的manage.sh 文件来migrate 就像

$ ./manage.sh migrate

但是终端抛出一个错误是

bash: ./manage.sh: Permission denied

即使我尝试使用 sudo

,我也没有真正了解它有什么问题

如果我尝试使用 sudo,比如 sudo ./docker-manage.sh migrate

它抛出这个错误:sudo: ./docker-manage.sh: command not found

相信如果你是docker高手,一定能解决我的问题。在这种情况下,你能帮我吗?

最佳答案

通常,您希望设置容器和镜像,以便它们可以完全自主运行。必须像这样重复运行 docker-compose run ... 表明您应该将更多工作转移到容器的启动中。

Docker 容器有两个部分来指定容器运行的单个程序,入口点命令。如果同时指定两者,则命令将作为命令行参数传递给入口点。一个非常典型的模式是使用 shell 脚本作为入口点,它首先执行所需的任何设置,然后运行命令作为其最后一个操作。

#!/bin/sh
# I am /docker-entrypoint.sh

# Run migrations &c.
python /code/manage.py migrate --noinput
python /code/manage.py createsuperuser

# Run the main container process (our script's arguments)
exec "$@"

然后在您的 Dockerfile 中,将此脚本指定为 ENTRYPOINT,无论您希望您的容器作为 CMD 执行什么操作.

FROM python:3.7
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

# Assume this copies docker-entrypoint.sh too, and that
# it's marked executable in your local filesystem
COPY . .

EXPOSE 5000

# IMPORTANT: use JSON-array syntax for ENTRYPOINT
ENTRYPOINT ["/app/docker-entrypoint.sh"]

# This is the main thing your container does
# (It could use plain-string syntax if you want)
CMD ["flask", "run", "--host=0.0.0.0"]

(如果您当前在 ENTRYPOINTCMD 之间拆分了默认命令,请将其全部移动到 CMD 中。)

您可以用它做的一件事是获得一个调试 shell。入口点始终运行,除非您特别覆盖它,但您可以单独指定命令。因此,如果您想单独查看迁移的作用,您可以

sudo docker-compose run web bash

bash 将作为参数传递给入口点脚本,然后该脚本将运行迁移并将您放入 shell。

关于django - django 项目中拒绝 docker 权限的 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57926815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com