首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker-组合django和mysql的错误

问docker-组合django和mysql的错误
EN

Stack Overflow用户
提问于 2020-03-04 10:38:52
回答 1查看 248关注 0票数 0

我正在尝试用Docker容器配置Django和MySql应用程序。

对于Django,我使用python:3.7-瘦映像,对于MySql,mysql:5.6。

当我运行docker-compose up时,它返回如下所述的一个错误-

代码语言:javascript
复制
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来检查停靠状态,并发现已经创建了mysql容器,但是python容器状态已经退出。

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

settings.py

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'my-app-db',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'mysql_db',
        'PORT': 3307,
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-04 10:52:44

bind: address already in use建议您运行一些本地数据库。如果您不需要访问网络之外的数据库,就不要公开端口3306。所以我试着在没有

代码语言:javascript
复制
...
    ports:
      - "3306:3306"
...

在settings.py中,您还连接到端口mysql_db:3307,因此将其更改为默认端口3306。

即使将数据库端口公开给本地主机上的其他端口,settings.py也使用mysql_db网络进行连接,因此不应该在django设置中更改此端口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60524156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档