簡體   English   中英

Dockerized Django無法連接到MySQL

[英]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.1localhost ,從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM