但我有问题。
Dockerfile:
FROM python:3
ENV PYTHONUNBUFFERED 0
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
撰写.yml:
version: '3'
services:
db:
image: postgres
volumes:
- ./docker/data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=sampledb
- POSTGRES_USER=sampleuser
- POSTGRES_PASSWORD=samplesecret
- POSTGRES_INITDB_ARGS=--encoding=UTF-8
django:
build: .
environment:
- DJANGO_DEBUG=True
- DJANGO_DB_HOST=db
- DJANGO_DB_PORT=5432
- DJANGO_DB_NAME=sampledb
- DJANGO_DB_USERNAME=sampleuser
- DJANGO_DB_PASSWORD=samplesecret
- DJANGO_SECRET_KEY=dev_secret_key
ports:
- "8000:8000"
command:
- python3 manage.py runserver
volumes:
- .:/code
error :
ERROR: for django Cannot start service django: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"python3 manage.py runserver\": executable file not found in $PATH": unknown
起初,我认为 Python Manage 是错误的。
但我尝试了命令ls
,令我惊讶的是,我成功了。
然后我尝试了 ls -al 命令,但失败了。
我认为添加写入空间的命令会导致问题。
我该如何解决它?
当您在中使用列表语法时docker-compose.yml
文件中,每个项目都被视为一个单词。您正在运行相当于
'python3 manage.py runserver'
您可以自己将其分解为单独的单词
command:
- python3
- manage.py
- runserver
或者让 Docker Compose 帮你完成
command: python3 manage.py runserver
一般来说,像这样的图像的固定属性应该在 Dockerfile 中指定,而不是在docker-compose.yml
。每次运行此映像时,您都需要运行相同的命令,并且需要运行映像中内置的代码。有两种语法,具有相同的基本区别:
# Explicitly write out the words
CMD ["python3", "manage.py", "runserver"]
# Docker wraps in sh -c '...' which splits words for you
CMD python3 manage.py runserver
通过图像中内置的代码和其中定义的合理的默认命令,您可以删除volumes:
and command:
从你的docker-compose.yml
file.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)