[英]Dockerized Django can't connect to MySQL
使用本教程https://semaphoreci.com/community/tutorials/dockerizing-a-python-django-web-application ,我使用docker-machine
在VirtualBox中將Django應用程序docker-machine
。 一切都變得如此出色,直到我進入瀏覽器並且我的應用程序說它與MySQL有關。
然后,我找到了此文檔,該文檔用於對我遵循的mysql https://github.com/mysql/mysql-docker實例進行泊塢處理,並在與我創建的開發VirtualBox相同的映像中創建映像。 我最初遇到的錯誤是
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
我的Django數據庫看起來像這樣
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_name',
'USER': 'root',
'HOST': 'localhost',
'PORT': ''
}
}
然后,我將主機更改為127.0.0.1
,甚至嘗試將端口指定為3306
然后收到一個新錯誤,該錯誤是
(2003, "Can't connect to MySQL server on '127.0.0.1' (111)")
我還進入MySQL工作台,並將本地實例的連接更改為127.0.0.1:3306
,但這沒有幫助。
我正在運行的命令是
eval "$(docker-image env development)"
--->應該做這些事情:
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://123.456.78.910:1112"
export DOCKER_CERT_PATH="/Users/me/.docker/machine/machines/development"
export DOCKER_MACHINE_NAME="development"
然后,現在我在虛擬機中,我運行:
docker run -it -p 8000:8000 <docker image name>
--->將暴露的端口8000轉發到本地計算機上的端口8000
docker run -it -p 3306:3306 mysql/mysql-sever
--->將暴露的端口3306轉發到本地計算機上的端口3306
問題是您正在嘗試連接127.0.0.1
或localhost
,從django容器的角度來看,它將引用自身而不是mysql容器。
通常,對於容器進行通信,最好的“ docker方法”是使容器共享一個公共的docker網絡。
docker network create mynet
docker run -it --network mynet -p 8000:8000 <docker image name>
docker run -it --network mynet -p 3306:3306 --name mysql mysql/mysql-sever
現在,應用程序容器可以使用mysql
作為主機名和3306
作為端口連接到mysql。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.