【发布时间】:2021-07-07 07:34:31
【问题描述】:
我正在尝试使用 docker 和 docker compose 设置我的开发环境。我正在将 Django 与 Mysql 和 phpymyadmin 一起使用。当我运行 docker-compose up 命令时,我的 mysql 和 phpmyadmin 图像设置正确,但我的 Django 应用程序失败并抛出此错误,
django.db.utils.OperationalError: (2002, "Can't connect to MySQL 服务器在 '192.168.1.221' (115)")
这是我的 yaml 文件。
version: '3.1'
services:
db:
image: mysql
restart: always
environment:
MYSQL_HOST: localhost
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
MYSQL_ROOT_HOST: '%'
ports:
- "3308:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
restart: always
environment:
PMA_HOST: db
PMA_USER: root
PMA_PASSWORD: root
ports:
- "8080:80"
web:
build: .
command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver"
container_name: demo
volumes:
- .:/data
ports:
- "8000:8000"
depends_on:
- db
networks:
base:
这是我的 django 应用程序的 Dockerfile。
# Dockerfile
FROM python:3.8
# install nginx
RUN apt-get update && apt-get install nginx vim -y --no-install-recommends
RUN pip install mysql-connector
COPY nginx.default /etc/nginx/sites-available/default
# RUN ln -sf /dev/stdout /var/log/nginx/access.log \
# && ln -sf /dev/stderr /var/log/nginx/error.log
# The enviroment variable ensures that the python output is set straight
# to the terminal with out buffering it first
ENV PYTHONUNBUFFERED 1
# create root directory for our project in the container
RUN mkdir /opt/app
# set working dir
WORKDIR /opt/app
# ENV PORT=8000
EXPOSE 8000
# Copy the project files to working dir
COPY . /opt/app
# install dependencies, you can change it to production.txt to deploy on the production env
RUN pip install -r requirements/development.txt
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
这是我用于数据库连接的环境变量。
DB_HOST=db
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=root
DATABASES = {
"default": {
'ENGINE': 'django.db.backends.mysql',
'NAME': env.str('DB_DATABASE'),
'HOST': env.str('DB_HOST'),
'USER': env.str('DB_USERNAME'),
'PASSWORD': env.str('DB_PASSWORD')
}
}
DATABASES["default"]["ATOMIC_REQUESTS"] = True
我已经尝试并检查过 stackoverflow 上的其他类似帖子,但它们没有帮助。我对 Docker 还很陌生。任何帮助将不胜感激。
【问题讨论】:
-
我认为您应该将
DB_PORT更改为3308,因为您在docker-compose中映射它 -
我这样做了,但同样的错误即将到来。
-
你能添加你的 Django 数据库连接信息吗?
-
@Saeed 补充说。
-
恐怕我不知道更多
标签: django docker docker-compose