python - docker-compose up django 和 mysql 的错误
问题描述
我正在尝试使用 Docker 容器配置 Django 和 MySql 应用程序。
对于 Django,我使用 python:3.7-slim 图像和 MySql mysql:5.6。
当我运行docker-compose up
它时,它会返回如下所述的错误 -
ERROR: for app_mysql_db_1 Cannot start service mysql_db: driver failed programming external connectivity on endpoint app_mysql_db_1 (c647d4793a198af2c09cc52d08191fb2cd984025ad0a61434ad1577d9dcccebe): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use
我运行命令docker ps -a
检查 docker 状态,发现创建了 mysql 容器但退出了 python 容器状态。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7d91795e0bae mysql:5.6 "docker-entrypoint.s…" 15 seconds ago Created app_mysql_db_1
fa0419ad0f21 e0bf94710555 "/bin/sh -c 'adduser…" 2 minutes ago Exited (1) 2 minutes ago pedantic_faraday
有人可以重写或建议修改配置。
Dockerfile
FROM python:3.7-slim
ENV PYTHONUNBUFFERED 1
RUN apt-get update
RUN apt-get install python3-dev default-libmysqlclient-dev gcc -y
COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
RUN mkdir /app
WORKDIR /app
COPY . /app
docker-compose.yaml
version: "3"
services:
eitan-application:
restart: always
build:
context: .
ports:
- "8000:8000"
volumes:
- ./eitan:/app
command: >
sh -c "python3 manage.py runserver 0.0.0.0:8000
&& python3 manage.py makemigrations
&& python3 manage.py migrate"
depends_on:
- mysql_db
mysql_db:
image: mysql:5.6
command: mysqld --default-authentication-plugin=mysql_native_password
volumes:
- "./mysql:/var/lib/mysql"
ports:
- "3306:3306"
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=root
- MYSQL_USER=root
- MYSQL_PASSWORD=root
设置.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'my-app-db',
'USER': 'root',
'PASSWORD': 'root',
'HOST': 'mysql_db',
'PORT': 3307,
}
}
解决方案
bind: address already in use
建议您正在运行一些本地数据库。如果您不需要访问 docker-compose 网络之外的数据库,请不要公开端口 3306。所以我会尝试在没有
...
ports:
- "3306:3306"
...
同样在settings.py
您连接到端口时,请将其mysql_db:3307
更改为默认端口 3306。
即使您将数据库端口暴露给 localhost 上的某个其他端口,settings.py 也会使用mysql_db
网络连接,因此您不应在 django 设置中更改此端口。
推荐阅读
- javascript - 反引号字符在 javascript 中创建字符串模板
- spring - Cloud Sleuth 从 SpringBoot 1.5 更改为 2.x
- vba - 在 Word 中使用 Visual Basic 将方程式中的所有 Cambria Math 斜体字体更改为非斜体
- django - Django 2.1.2 密码重置身份验证视图:找不到“password_reset_confirm”的反向
- r - R:根据另一个变量在数据框中添加行
- html - 在图像之间添加空格
- debugging - 如何记录所有方法调用以在 ColdFusion 应用程序中进行调试
- python - 将反向数据帧附加到原始数据帧
- reporting-services - 如何根据另一列的值对 SSRS 折线图的值轴进行排序?
- rust - 为什么活塞的位置 (0, 0) 似乎在左侧窗口的中间?