Внутренняя ошибка сервера при развертывании с помощью docker

#docker #docker-compose #dockerfile #mysql-python

#docker #docker-compose #dockerfile #mysql-python

Вопрос:

Я привязываю к dockerize веб-сервис, я настроил следующие файлы:

dockerfile

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

docker-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 в начале должен избежать этой ошибки

Ответ №1:

согласно https://docs.docker.com/compose/networking / ваш DB_HOST должен быть db , который является вашим именем службы db, а не 0.0.0.0