Docker-compose 错误 [内部] 启动 buildkit,http:部署 Django 时主机标头无效

Jin*_*gda 3 django docker dockerfile docker-compose docker-buildkit

我正在使用 docker compose 在 Ubuntu 22.04.3 上创建 Django 服务器、MySQL 数据库和 Django Q。但是当我运行 docker-compose -f ./docker-compose.yml 时,出现以下错误:

[+] Building 38.8s (1/1) FINISHED
 => ERROR [internal] booting buildkit                                                                             38.8s
 => => pulling image moby/buildkit:buildx-stable-1                                                                20.4s
 => => creating container buildx_buildkit_default                                                                 18.5s
------
 > [internal] booting buildkit:
#0 38.84 time="2023-10-13T13:02:28Z" level=warning msg="using host network as the deftime="2023-10-13T13:02:28Z" level=warning msg="using host network as the default"
#0 38.84 time="2023-10-13T13:02:28Z" level=warning msg="skipping containerd worker, as \"/run/containerd/containerd.sock\" does not exist"
#0 38.84 dtime="2023-10-13T13:02:28Z" level=info msg="found 1 workers, default=\"abfxoy5dnaaz4694avydedw1g\""
#0 38.84 `time="2023-10-13T13:02:28Z" level=warning msg="currently, only the default worker can be used."
#0 38.84 \time="2023-10-13T13:02:28Z" level=info msg="running server on /run/buildkit/buildkitd.sock"
#0 38.84 time="2023-10-13T13:02:28Z" level=warning msg="skipping containerd worker, as \"/run/containerd/containerd.sock\" does not exist"
#0 38.84 time="2023-10-13T13:02:28Z" level=warning msg="currently, only the default worker can be used."
#0 38.84 time="2023-10-13T13:02:28Z" level=warning msg="currently, only the default worker can be used."
#0 38.84
------
http: invalid Host header
Run Code Online (Sandbox Code Playgroud)

我的 Docker 信息:

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc., v0.10.4)
  compose: Docker Compose (Docker Inc., v2.17.2)

Server:
 Containers: 1
  Running: 1
  Paused: 0
  Stopped: 0
 Images: 4
 Server Version: 20.10.24
 Storage Driver: zfs
  Zpool: rpool
  Zpool Health: ONLINE
  Parent Dataset: rpool/ROOT/ubuntu_5bq6zk/var/snap
  Space Used By Parent: 1548288
  Space Available: 502181703680
  Parent Quota: no
  Compression: lz4
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 2806fc1057397dbaeefbea0e4e17bddfbd388f38
 runc version:
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: default
  cgroupns
 Kernel Version: 5.19.0-46-generic
 Operating System: Ubuntu Core 22
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 7.752GiB
 Name: COSHOKDS01
 ID: CRI6:RNK6:QDAX:DPRN:OTB6:MEWS:OKKV:4J7W:LPPW:5T5G:VC6N:2PN3
 Docker Root Dir: /var/snap/docker/common/var-lib-docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false
Run Code Online (Sandbox Code Playgroud)

我的 Dockerfile 如下:

FROM python 3.10

ENV PYTHONUNBUFFERED 1

RUN apt-get update
RUN apt-get install python3-dev default-libmysqlclient-dev -y

RUN mkdir -p /app
WORKDIR /app

RUN pip install pip -U

COPY requirements.txt /app/

RUN pip install -r requirements.txt

COPY . /app/
Run Code Online (Sandbox Code Playgroud)

我的 docker-compose.yml:

version: '3.9'
services:
  redis:
    image: redis:alpine
    ports:
      - 6379:6379
  web:
    build:
      context: .
      dockerfile: Dockerfile
    image: rest
    container_name: rest
    restart: always
    command: python manage.py runserver 10.36.0.149:8000
    ports:
      - "8000:8000"
    volumes:
      - .:/app
    depends_on:
      - mysql
      - django_q
  mysql:
    image: mysql
    container_name: mysql
    command: --default-authentication-plugin=mysql_native_password --mysqlx=0
    volumes:
      - "./mysql:/var/lib/mysql"
    environment:
      - MYSQL_HOST=localhost
      - MYSQL_PORT=3306
      - MYSQL_DATABASE=kds_db
      - MYSQL_USER=kds_admin
      - MYSQL_PASSWORD=
    ports:
      - 3306:3306
    restart: always
  django_q:
    build: .
    command: python manage.py qcluster
    volumes:
      - .:/app
    depends_on:
      - redis
Run Code Online (Sandbox Code Playgroud)

有人知道发生了什么吗?

非常感谢

我尝试重新安装我的 docker 并避免使用 BuildKit,但它们不起作用。我想在 docker 上部署 Django REST 服务和 Django Q。

Ste*_*sch 16

我也有同样的问题。我猜你正在使用 snap docker。我服务器上的(snap)docker版本(2904)也有同样的问题。

在我的笔记本电脑上,docker 版本(2893)按预期工作。我将笔记本电脑上的快照通道更改为最新/候选(2904),并且出现了同样的问题。切换回最新/稳定版,一切都恢复正常。

所以:

snap info docker
Run Code Online (Sandbox Code Playgroud)

获取一些版本信息。

使用:

snap refresh --stable docker
Run Code Online (Sandbox Code Playgroud)

切换到稳定频道。

现在,正如预期的那样,您的项目在我的笔记本电脑上构建。我确实必须改变:

FROM python 3.10
Run Code Online (Sandbox Code Playgroud)

FROM python:3.10
Run Code Online (Sandbox Code Playgroud)

该切换适用于我的笔记本电脑 (Ubuntu 23.10),但不适用于我的服务器 (Ubuntu 18.04.6)。

在服务器上我必须使用:

sudo snap refresh --revision=2893 docker
Run Code Online (Sandbox Code Playgroud)