簡體   English   中英

使用 AWS Lightstail 容器的 Docker Compose 和 Django 應用程序無法部署

[英]Docker Compose and Django app using AWS Lighstail containers fail to deploy

我正在嘗試在最新版本的 Lightsail 上運行 Django 應用程序,該應用程序支持截至 2020 年 11 月部署 docker 容器( AWS Lightsail 容器公告)。

我創建了一個非常小的 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

我想知道幾件事:

  1. 現在我只是將web容器上傳到 Lightsail。 我還應該上傳db容器嗎?
  2. 我應該在 Lightsail 中創建一個 postgres 數據庫並先連接到它嗎?
  3. 我是否需要在應用程序啟動之前告訴 Django 運行數據庫遷移?
  4. 有沒有辦法從容器中啟用更多日志? 或者缺少日志是否意味着容器甚至無法啟動。

謝謝您的幫助!

Docker

這個問題源於對Docker的理解不好。 我之前試圖在我的docker-compose.yml中包含image: argylehacker/app-stats:latest以將web容器上傳到 DockerHub。 這是做事的錯誤方式。 據我現在了解, docker-compose最有助於編排本地環境,而不是創建可以在容器中運行的 docker 映像。

最重要的是將容器上傳到可以啟動您的服務器的 Lightsail。 當您使用 Docker 時,可以使用CMDDockerfile的結尾來指定。 在我的情況下,我需要將此行添加到我的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行。

此時,您應該能夠:

  1. 構建您的容器docker build -t argylehacker/app-stats:latest.
  2. 上傳到 DockerHub docker push argylehacker/app-stats:latest
  3. 在指向argylehacker/app-stats:latest的 AWS Lightsail 中部署它

故障排除

我被困住了,因為我在 Lightsail 日志終端中看不到任何有意義的日志。 這是因為我的容器實際上沒有運行任何東西。

為了在本地進行調試,我采取了以下步驟

  1. 構建映像docker build -t argylehacker/app-stats:latest.
  2. 運行容器docker run -it --rm -p 8000:8000 argylehacker/app-stats:latest

此時 docker 應該正在運行容器,您可以查看日志。 這正是 Lightsail 在運行您的容器時要做的事情。

我的原始問題的答案

  1. Dockerfil 與用於組合服務的 docker-compose 文件非常不同。 docker-compose 的目的是協調容器,而 Dockerfile 將定義如何構建圖像。 對於 Lightsail,您需要做的就是構建映像docker build <container>:<tag>
  2. 是的,您需要在 AWS Lightsail 中創建一個 Postgres 數據庫,以便 Django 可以連接到數據庫並運行。 一旦在 Lightsail 中可用,您將修改settings.py文件以包含數據庫憑據。
  3. 仍在尋找運行數據庫遷移的最佳方式
  4. 缺少日志是因為 Dockerfile 沒有啟動 Django

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM