Docker 使用 AWS Lightstail 容器的 Compose 和 Django 应用程序部署失败
Docker Compose and Django app using AWS Lighstail containers fail to deploy
我正在尝试在最新版本的 Lightsail 上获取 Django 应用程序 运行ning,它支持从 2020 年 11 月开始部署 docker 个容器 (AWS Lightsail Container Announcement)。
我创建了一个非常小的 Django 应用程序来对此进行测试。但是,我的容器部署继续卡住并失败。
以下是我能看到的唯一日志:
这是我的 Dockerfile:
FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
这是我的 docker-compose.yml:
version: "3.9"
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
image: argylehacker/app-stats:latest
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
我想知道一些事情:
- 现在我只将
web
容器上传到 Lightsail。我还应该上传 db
容器吗?
- 我应该先在 Lightsail 中创建一个 postgres 数据库并连接到它吗?
- 我是否需要在应用程序启动前告诉 Django 运行 数据库迁移?
- 有没有办法从容器中启用更多日志?或者缺少日志是否意味着容器甚至无法启动。
感谢您的帮助!
Docker
这个问题源于对Docker的错误理解。我之前试图在我的 docker-compose.yml
中包含 image: argylehacker/app-stats:latest
以将 web
容器上传到 DockerHub。这是错误的处理方式。据我现在的了解,docker-compose
最有助于协调您的本地环境,而不是创建 docker 可以在容器中 运行 的图像。
最重要的是上传一个容器到Lightsail,可以启动你的服务器。当您使用 Docker 时,可以使用 CMD
和 Dockerfile
的末尾指定。在我的例子中,我需要将这一行添加到我的 Dockerfile
:
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
所以现在看起来像这样:
FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
CMD ["python", "manage.py", "runserver", "2.0.0.0:8000"]
最后,我从 docker-compose.yml
文件中删除了 image: argylehacker/app-stats:latest
行。
此时你应该能够:
- 构建你的容器
docker build -t argylehacker/app-stats:latest .
- 上传到 DockerHub
docker push argylehacker/app-stats:latest
- 在指向
argylehacker/app-stats:latest
的 AWS Lightsail 中部署它
疑难解答
我卡住了,因为我在 Lightsail 日志终端中看不到任何有意义的日志。这是因为我的容器实际上 运行 没有任何东西。
为了在本地进行调试,我采取了以下步骤
- 构建图像
docker build -t argylehacker/app-stats:latest .
- 运行 容器
docker run -it --rm -p 8000:8000 argylehacker/app-stats:latest
.
此时docker应该运行正在连接容器,您可以查看日志。当它 运行 是您的容器时,这正是 Lightsail 要做的事情。
我原来问题的答案
- Dockerfil 与用于组合服务的 docker-compose 文件非常不同。 docker-compose 的目的是协调容器,而 Docker 文件将定义图像的构建方式。您需要为 Lightsail 做的就是构建图像
docker build <container>:<tag>
- 是的,您需要在 AWS Lightsail 中创建一个 Postgres 数据库,以便 Django 可以连接到数据库和 运行。一旦数据库凭据在 Lightsail 中可用,您将修改
settings.py
文件以包含数据库凭据。
- 仍在寻找 运行 数据库迁移
的最佳方法
- 缺少日志是因为Docker文件没有启动 Django
我正在尝试在最新版本的 Lightsail 上获取 Django 应用程序 运行ning,它支持从 2020 年 11 月开始部署 docker 个容器 (AWS Lightsail Container Announcement)。
我创建了一个非常小的 Django 应用程序来对此进行测试。但是,我的容器部署继续卡住并失败。
以下是我能看到的唯一日志:
这是我的 Dockerfile:
FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
这是我的 docker-compose.yml:
version: "3.9"
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
image: argylehacker/app-stats:latest
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
我想知道一些事情:
- 现在我只将
web
容器上传到 Lightsail。我还应该上传db
容器吗? - 我应该先在 Lightsail 中创建一个 postgres 数据库并连接到它吗?
- 我是否需要在应用程序启动前告诉 Django 运行 数据库迁移?
- 有没有办法从容器中启用更多日志?或者缺少日志是否意味着容器甚至无法启动。
感谢您的帮助!
Docker
这个问题源于对Docker的错误理解。我之前试图在我的 docker-compose.yml
中包含 image: argylehacker/app-stats:latest
以将 web
容器上传到 DockerHub。这是错误的处理方式。据我现在的了解,docker-compose
最有助于协调您的本地环境,而不是创建 docker 可以在容器中 运行 的图像。
最重要的是上传一个容器到Lightsail,可以启动你的服务器。当您使用 Docker 时,可以使用 CMD
和 Dockerfile
的末尾指定。在我的例子中,我需要将这一行添加到我的 Dockerfile
:
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
所以现在看起来像这样:
FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
CMD ["python", "manage.py", "runserver", "2.0.0.0:8000"]
最后,我从 docker-compose.yml
文件中删除了 image: argylehacker/app-stats:latest
行。
此时你应该能够:
- 构建你的容器
docker build -t argylehacker/app-stats:latest .
- 上传到 DockerHub
docker push argylehacker/app-stats:latest
- 在指向
argylehacker/app-stats:latest
的 AWS Lightsail 中部署它
疑难解答
我卡住了,因为我在 Lightsail 日志终端中看不到任何有意义的日志。这是因为我的容器实际上 运行 没有任何东西。
为了在本地进行调试,我采取了以下步骤
- 构建图像
docker build -t argylehacker/app-stats:latest .
- 运行 容器
docker run -it --rm -p 8000:8000 argylehacker/app-stats:latest
.
此时docker应该运行正在连接容器,您可以查看日志。当它 运行 是您的容器时,这正是 Lightsail 要做的事情。
我原来问题的答案
- Dockerfil 与用于组合服务的 docker-compose 文件非常不同。 docker-compose 的目的是协调容器,而 Docker 文件将定义图像的构建方式。您需要为 Lightsail 做的就是构建图像
docker build <container>:<tag>
- 是的,您需要在 AWS Lightsail 中创建一个 Postgres 数据库,以便 Django 可以连接到数据库和 运行。一旦数据库凭据在 Lightsail 中可用,您将修改
settings.py
文件以包含数据库凭据。 - 仍在寻找 运行 数据库迁移 的最佳方法
- 缺少日志是因为Docker文件没有启动 Django