7 python mysql django docker docker-compose
我正在尝试通过以下方式启动服务器docker-compose up
我收到错误:
\n\n2002,“无法通过套接字连接到本地 MySQL 服务器\'/run/mysqld/mysqld.sock\' (2)”
\n\ndocker-compose.yml
\n\nversion: \'3\'\n\nservices:\n db:\n image: mysql:5.7\n environment:\n MYSQL_DATABASE: \'slack_bot1\'\n MYSQL_USER: \'root\'\n MYSQL_PASSWORD: \'\'\n MYSQL_ROOT_PASSWORD: \'****\'\n volumes:\n - /opt/slack_bot/mysql_data:/var/lib/mysql\n redis:\n image: "redis:alpine"\n volumes:\n - /opt/slack_bot/redis_data:/var/lib/redis\n web:\n build: .\n command: python manage.py runserver 0.0.0.0:8001\n ports:\n - "8001:8001"\n depends_on:\n - db\nRun Code Online (Sandbox Code Playgroud)\n\nDockerfile
\n\nFROM python:3.7-alpine\nENV PYTHONUNBUFFERED 1\nWORKDIR /home/slack_bot\nADD requirements.txt /home/slack_bot/\nRUN set -e; \\\n apk add --no-cache --virtual .build-deps \\\n gcc \\\n libc-dev \\\n linux-headers \\\n mariadb-dev \\\n python3-dev \\\n ;\nRUN pip install -r requirements.txt\nADD . /home/slack_bot/\nEXPOSE 8001\nCMD ["python", "manage.py", "runserver", "0.0.0.0:8001"]\nRun Code Online (Sandbox Code Playgroud)\n\ndocker ps日志
\n\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n68b61ca0ce74 slack_bot_web "python manage.py ru\xe2\x80\xa6" 8 minutes ago Up 32 seconds 0.0.0.0:8001->8001/tcp slack_bot_web_1\nc5f254a527b0 mysql:5.7 "docker-entrypoint.s\xe2\x80\xa6" 8 minutes ago Up 34 seconds 3306/tcp, 33060/tcp slack_bot_db_1\n4cbc1fa3765e redis:alpine "docker-entrypoint.s\xe2\x80\xa6" 15 minutes ago Up 33 seconds 6379/tcp slack_bot_redis_1\nRun Code Online (Sandbox Code Playgroud)\n\nDjango数据库设置
\n\n \'ENGINE\': \'django.db.backends.mysql\',\n \'NAME\': \'slack_bot1\',\n \'USER\': \'root\',\n \'PASSWORD\': \'\',\n \'HOST\': \'\',\n \'PORT\': \'\',\nRun Code Online (Sandbox Code Playgroud)\n
在 django 设置中,将数据库主机保留为 EMPTY,则默认值为localhost。使用时localhost,mysql客户端驱动会与unix socketnot连接mysql服务器tcp。
因此,对于您的情况,您需要将unix socketmysql 容器导出到卷,然后您的 django 应用程序容器利用该卷来共享unix socket.
接下来是您需要做的:
手动新建一个文件夹,稍后将其作为卷来共享您的 unix 套接字文件
(重要提示:您不能依赖 docker-compose 来新建此文件夹,您将遇到权限错误)
mkdir -p /tmp/slack_bot/mysqld && chmod -R 777 /tmp/slack_bot/mysqld
Run Code Online (Sandbox Code Playgroud)在您的 中docker-compose.yaml,再添加一个服务卷mysql:
db:
image: mysql:5.7
environment:
MYSQL_DATABASE: 'slack_bot1'
MYSQL_USER: 'root'
MYSQL_PASSWORD: ''
MYSQL_ROOT_PASSWORD: '****'
volumes:
- /opt/slack_bot/mysql_data:/var/lib/mysql
- /tmp/slack_bot/mysqld:/var/run/mysqld
Run Code Online (Sandbox Code Playgroud)在您的 中docker-compose.yaml,再添加一个服务卷web:
web:
build: .
command: python manage.py runserver 0.0.0.0:8001
ports:
- "8001:8001"
depends_on:
- db
volumes:
- /tmp/slack_bot/mysqld:/run/mysqld
Run Code Online (Sandbox Code Playgroud)
注意:在这里你说你收到了下一个错误/run/mysqld/mysqld.sock,我不确定你是否粘贴了最常见的所有日志/var/run/mysqld/mysqld.sock,但是,如果错误是那么/var/run/mysqld/mysqld.sock你应该将上面的示例卷修改为- /tmp/slack_bot/mysqld:/var/run/mysqld
2002,“无法通过套接字 '/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)”
有了上面的内容,现在您的 Web 服务可以共享 mysql 容器中的 unix 套接字了。
另外,我认为配置HOST也db可能是另一种解决方案,只是unix socket比使用要快得多tcp。
| 归档时间: |
|
| 查看次数: |
16877 次 |
| 最近记录: |