首页 > 解决方案 > 使用 docker 部署时出现内部服务器错误

问题描述

我正在绑定一个 web 服务,我配置了以下文件:

dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

码头工人-compose.yml

version: '3'

services:
  db:
    image: mysql
    container_name: DB_test
    environment:
      MYSQL_DATABASE: 'test'
      MYSQL_USER: 'user'
      MYSQL_PASSWORD: 'password'
      MYSQL_ROOT_PASSWORD: 'password'
    ports:
      - "3306:3306"
    volumes:
      - ./sql:/docker-entrypoint-initdb.d
  web:
    build: .
    command: gunicorn --bind 0.0.0.0:8000 manage:app
    ports:
      - "8000:8000"
    depends_on:
      - db

sql/init.sql

GRANT ALL PRIVILEGES ON test TO 'user'@'%';

FLUSH PRIVILEGES;

sqlalchemy_conf

{
    "HR_API_ID" : "api_id",
    "HR_API_CODE" : "api_code",
    "DB_HOST" : "0.0.0.0",
    "DB_PORT" : "3306",
    "DB_USERNAME" : "user",
    "DB_PASSWORD" : "password",
    "DB_NAME" : "test",
    "DB_CONNECTION" : "mysql"
}

之后我运行:

docker-compose build
docker-compose up

当我尝试访问http://0.0.0.0:8000/时,控制台中出现的日志错误如下:

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '0.0.0.0' ([Errno 111] Connection refused)") (Background on this error at: http://sqlalche.me/e/e3q8)

http://0.0.0.0:8000/

Internal Server Error

我究竟做错了什么?

更新:

DB_HOST" : "db"

新错误:

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045, "Access denied for user 'user'@'172.19.0.3' (using password: YES)") (Background on this error at: http://sqlalche.me/e/e3q8)

不确定,但在开始时运行init.sql应该可以避免这个错误

标签: dockerdocker-composedockerfilemysql-python

解决方案


根据https://docs.docker.com/compose/networking/ 你的 DB_HOST 应该db是你的数据库服务名称而不是 0.0.0.0


推荐阅读