我正在学习一门课程,目前停留在它的这部分。
启动 Docker 容器后(这表明它在运行本地主机时已正确安装),我得到:
service "movies" is not running
文件夹结构:
docker-compose.yaml
:
# version: '3.8'
services:
movies:
build: ./TestDrivenIO
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./TestDrivenIO/:/usr/src/TestDrivenIO/
ports:
- 8009:8000
env_file:
- ./TestDrivenIO/.env.dev
depends_on:
- movies-db
movies-db:
image: postgres:15
volumes: # create a volume and bind directory to the container
- postgres_data:/var/lib/postgresql/data/
environment: # added ENV key to define a name for default DB & credentials
- POSTGRES_USER=movies
- POSTGRES_PASSWORD=movies
- POSTGRES_DB=movies_dev
volumes:
postgres_data:
Dockerfile:
# pull official base image
FROM python:3.11.2-slim-buster
# set working directory
WORKDIR /usr/src/TestDrivenIO
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# updated
# install system dependencies
RUN apt-get update \
&& apt-get -y install netcat gcc postgresql \
&& apt-get clean
# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# new
# copy entrypoint.sh
COPY ./entrypoint.sh /usr/src/TestDrivenIO/entrypoint.sh
RUN chmod +x /usr/src/TestDrivenIO/entrypoint.sh
# add app
COPY . .
# new
# run entrypoint.sh
ENTRYPOINT ["/usr/src/TestDrivenIO/entrypoint.sh"]
我如何确定这里的问题?我看不到任何检查日志的方法,似乎我已经做对了所有事情,但我不明白为什么它说它没有运行。
这是检查进程时的样子:
经过一些额外的研究,我发现由于某种原因,
entrypoint.sh
文件没有被复制。
在研究了我可能能做的一切之后......我回去注释掉了
Dockerfile
入口点和下面的部分。有效。所以这一改变就是问题所在。
然后我删除了入口点文件,然后创建了一个具有相同内容的新文件。取消注释这些内容。它成功了!我已经像班级所说的那样在本地更改了文件的权限,但显然这导致了复制文件的问题。
更新:不,我错了。我只是再也没有取消注释该部分。还是不行。