我正在使用以下example来构建django-postgres-nginx-gunicorn Web服务器。我希望每个容器都有单独的文件夹。项目的以下结构正常工作。主Dockerfile用于hello应用程序(django项目):
svm3_03
|____Dockerfile
|____config
| |____gunicorn
| | |____conf.py
| |____nginx
| | |____conf.d
| | |____local.conf
| |____db
| |____db_env
|____docker
| |__db
| |__Dockerfile
| |__dataForDB
|__docker-compose.yml
|__hello
docker-compose.yml看起来像这样:
version: '3'
...
services:
djangoapp:
build:
context: .
...
并且Dockerfile具有以下行:
CMD ["gunicorn", "-c", "config/gunicorn/conf.py", "--bind", ":8000", "--chdir", "hello", "hello.wsgi:application"]
一切正常。现在我尝试为django应用程序提供与DB映像相同的结构,因此我将主Dockerfile和hello目录移至docker文件夹内...我在docker文件夹内创建了一个名为djangoapp的新文件夹,并将其移至了该目录Dockerfile和hello文件夹。新的结构如下:
svm3_03
|____config
| |____gunicorn
| | |____conf.py
| |____nginx
| | |____conf.d
| | |____local.conf
| |____db
| |____db_env
|____docker
| |__db
| | |__Dockerfile
| | |__dataForDB
| |__djangoapp
| |__Dockerfile
| |__hello
|__docker-compose.yml
然后我要做的就是像这样更改docker-compose.yml文件中的上下文行:
version: '3'
...
services:
djangoapp:
build:
context: ./docker/djangoapp
...
现在出现以下错误:
djangoapp_1_7b3c77a4b939 | Error: can't chdir to 'hello'...
这是由于djangoapp Dockerfile中的gunicorn和命令行CMD所致。显然在docker-compose.yml中更改上下文是不够的...知道我缺少什么吗?
谢谢
更新: 这是完整的dockerfile:
FROM python:2
ENV PYTHONUNBUFFERED 1
RUN mkdir -p /opt/services/djangoapp/src
WORKDIR /opt/services/djangoapp/src
COPY . /opt/services/djangoapp/src
RUN pip install --no-cache-dir -r hello/requirements.txt
RUN cd hello && python manage.py collectstatic --no-input
EXPOSE 8000
CMD ["gunicorn", "-c", "config/gunicorn/conf.py", "--bind", ":8000", "--chdir", "hello", "hello.wsgi:application"]
答案 0 :(得分:0)
我认为问题不在于/hello
,而在于config/
,似乎没有被复制到容器内。要进行验证,请exec -it
进入容器,然后ls
。
您需要在其中传递该文件夹,一种解决方案是使用音量:
服务: djangoapp: 体积: -./config:/opt/services/djangoapp/src
另一种解决方案是将其复制到映像中,您将需要更改构建上下文,否则docker会抱怨从上下文外部复制文件
services:
djangoapp:
build:
context: .
dockerfile: ./docker/djangoapp/Dockerfile
并更改Dockerfile中的路径以使其相对于新上下文
COPY ./docker/djangoapp /opt/services/djangoapp/src
答案 1 :(得分:0)
最后,我能够找到问题所在。我的错误是在Django应用程序的Dockerfile中。运行gunicorn的命令必须指向正确的目录。这是正确的命令:
CMD ["gunicorn", "-c", "config/gunicorn/conf.py", "--bind", ":8000", "--chdir", "docker/djangoapp/hello", "hello.wsgi:application"]
请注意--chdir选项的参数。