使用 Docker 和 Django 在 $PATH 错误中找不到 mysql 文件?

问题描述

我正在 Mac OS X 上将 Django 和 Docker 与 MariaDB 结合使用。

我正在尝试授予 Django 设置测试数据库的权限。为此,我有一个脚本来执行此代码 sudo docker exec -it $container MysqL -u root -p。当我在启动后执行此操作时,我收到此错误消息,而不是提示输入数据库密码,

OCI 运行时 exec 失败:exec 失败:container_linux.go:370:导致启动容器进程:exec:“MysqL”:在 $PATH 中找不到可执行文件:未知

在 Ubuntu 机器上,我可以删除数据库的数据文件夹并启动、旋转和运行命令而不会出现错误,但在我的 Mac 上,这是我想使用的主要机器,此修复不起作用。有任何想法吗?我有一个对等拉代码并在他们的 Mac 上尝试它,它对他们做了同样的事情! Docker 对我来说很神奇。

这是我的 docker-compose.yml。

version: "3.3"

networks:
  django_db_net:
    external: false

services:
  django:
    build: ./docker/django
    restart: 'unless-stopped'
    depends_on:
      - db
    networks:
      - django_db_net
    user: "${HOST_USER_ID}:${HOST_GROUP_ID}"
    volumes:
      - ./src:/src
    working_dir: /src/vger
    command: ["/src/wait-for-it.sh","db:3306","--","python","manage.py","runserver","0.0.0.0:8000"]

    ports:
      - "${DJANGO_PORT}:8000"

  db:
    image: mariadb:latest
    user: "${HOST_USER_ID}:${HOST_GROUP_ID}"
    volumes:
      - ./data:/var/lib/MysqL
    restart: always
    environment:
      - MysqL_ROOT_PASSWORD=this_is_a_bad_password
      - MysqL_USER=django
      - MysqL_PASSWORD=django
      - MysqL_DATABASE=vger
    networks:
      - django_db_net

还有我的 Dockerfile

FROM python:latest

ENV PYTHONUNBUFFERED=1
RUN pip3 install --upgrade pip & \
  pip3 install django MysqLclient
ENV MysqL_MAJOR 8.0
RUN apt-key adv --keyserver hkp://pool.sks-keyservers.net:80 --recv-keys 8C718D3B5072E1F5 & \
  echo "deb http://repo.MysqL.com/apt/debian/ buster MysqL-${MysqL_MAJOR}" > /etc/apt/sources.list.d/MysqL.list & apt-get update & \
  apt-get -y --no-install-recommends install default-libMysqLclient-dev
workdir /src

解决方法

我修好了!

这真的很傻,但 OS X 不喜欢“$container”,所以如果你明确地只写数据库的容器名称,它就像一个魅力!