在 Django 项目中拒绝 docker 权限的 bash 脚本



我正在学习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是外壳脚本文件

#!/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-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中。

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

sudo docker-compose run web bash

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

脚本似乎不可执行。

要解决此问题,您应该做的是:

chmod u+x ./manage.sh
./manage.sh migrate

未设置可执行权限的示例:

Users-MacBook-Pro:newfol myuser$ ls -l
total 0
-rw-r--r--  1 myuser  staff  0 13 Sep 13:53 manage.sh
Users-MacBook-Pro:newfol myuser$ ./manage.sh
-bash: ./manage.sh: Permission denied
Users-MacBook-Pro:newfol myuser$ chmod u+x manage.sh
Users-MacBook-Pro:newfol myuser$ ./manage.sh
it works

相关内容

  • 没有找到相关文章

最新更新