gpt4 book ai didi

python - 将docker添加到django项目: no such file or directory

转载 作者:行者123 更新时间:2023-12-02 21:21:54 30 4
gpt4 key购买 nike

我正在尝试将 docker 支持添加到已经存在的 django 项目中。我有一个 Dockerfile , 一个 docker-compose , 和 gunicorn.sh我用它作为脚本来启动整个事情。当我从 shell 运行该脚本时,它运行良好。

当我运行时:

docker-compose -f docker-compose.yml up

我收到此错误:
ERROR: for intranet_django_1  Cannot start service django: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/srv/gunicorn.sh\": stat /srv/gunicorn.sh: no such file or directory"   

我到底做错了什么?

我非常喜欢 docker n00b,所以欢迎任何解释。
Dockerfile看起来像这样:
FROM python:3
ENV PYTHONUNBUFFERED 1
ENV DB_NAME unstable_intranet_django
ENV DB_USER django
ENV DB_PASSWORD ookookEEK
ENV DB_HOST db
ENV DB_PORT 3306
RUN groupadd -r django
RUN useradd -r -g django django
COPY ./requirements/requierments.txt /srv/
RUN pip install -U pip
RUN pip install -r /srv/requierments.txt
COPY ./intranet_site/ /srv
RUN chmod a+rx /srv/gunicorn.sh
RUN chown -R django:django /srv/
USER django
WORKDIR /srv

我很清楚不应在此处设置密码,并且带有包含密码的文件的永久卷可能是处理它的最佳方法。然而,我有点想要一些工作,而不是花几个小时摆弄东西而看不到任何东西在运行……
docker-compose.yml好像:
version: '3'

services:
db:
image: mariadb
environment:
- MYSQL_ROOT_PASSWORD=fubar
- MYSQL_USER=django
- MYSQL_PASSWORD=ookookEEK
- MYSQL_DATABASE=unstable_intranet_django
django:
build: .
command: /srv/gunicorn.sh
volumes:
- .:/srv
ports:
- "8000:8000"
depends_on:
- db

最后, gunicorn.sh文件是:
#!/bin/bash
# -*- coding: utf-8 -*-
# Check if the database is alive or not.
python << END
from MySQLdb import Error
from MySQLdb import connect
from sys import exit
from time import sleep

retry=0
while True:
try:
conn = connect(db="$DB_NAME",
user="$DB_USER",
password="$DB_PASSWORD",
host="$DB_HOST",
port=$DB_PORT)
print("✔ DB $DB_NAME on $DB_HOST:$DB_PORT is up.")
break
except Error as err:
snooze = retry / 10.0
print("✖ DB $DB_NAME on $DB_HOST:$DB_PORT is unavailable "
"→ sleeping for {}…".format(snooze))
sleep(snooze)
retry += 1
exit(0)
END

# Set up log file.
log="./gunicorn.log"
date > ${log}

# Collectstatic
echo "Collecting static files." | tee -a ${log}
python manage.py collectstatic -v 3 --noinput >> ${log}

# Migrate database
echo "Doing database migration." | tee -a ${log}
python manage.py migrate -v 3 >> ${log}

# New shiny modern hip way:
echo "Running Gunicorn on ${HOSTNAME} …" | tee -a ${log}
gunicorn -b ${HOSTNAME}:8000 -w 2 intranet_site.wsgi | tee -a ${log}

让事情变得陌生:
; docker run -it intranet_web /bin/bash                                                                               
django@ce7f641cc1c7:/srv$ ls -l gunicorn.sh
-rwxrwxr-x. 1 django django 1677 Jun 2 07:51 gunicorn.sh
django@ce7f641cc1c7:/srv$ ./gunicorn.sh
✖ DB unstable_intranet_django on 127.0.0.1:3306 is unavailable → sleeping for 0.0…

所以从容器运行脚本似乎工作得很好......

最佳答案

我认为你应该有:
ADD . /srv/而不是 COPY ./intranet_site/ /srv
因为ADD . /srv/添加您拥有 Dockerfile 的目录的所有内容到srv容器中的文件夹。所以COPY/ADD命令应在包含 Dockerfile 的文件夹中使用.我想你的Dockerfile位于项目的此根目录中(与 docker-compose.ymlgunicorn.sh 一起)。

您也可以使用 COPY . /srv/具有相同的效果。

关于python - 将docker添加到django项目: no such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44327242/

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