docker - 使用 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)
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应该可以避免这个错误
解决方案
根据https://docs.docker.com/compose/networking/
你的 DB_HOST 应该db
是你的数据库服务名称而不是 0.0.0.0
推荐阅读
- java - JAR 升级后找不到符号 PreparedStatement
- xml - 使用 muenchian 分组创建具有不同异常的多个节点
- apache-flink - Kafka 流如何在 Flink 中的 TaskManager 之间分配?
- flutter - 如何关闭 Flutter 页面过渡动画
- reactjs - 如何覆盖材料表中默认操作按钮的工具提示?
- amazon-web-services - AWS 应用流 | 触发 lambda
- javascript - 为什么 Javascript 传递元素,而不是 ID?
- linux - Vue npm run serve 加载资源失败:net::ERR_CONTENT_LENGTH_MISMATCH
- sql - 从多个表创建父子视图
- angular - 如何使用具有键和值的 id 设置参数并在调用 API 时动态传递 id