运行docker django容器时无法连接到服务器
Posted
技术标签:
【中文标题】运行docker django容器时无法连接到服务器【英文标题】:Unable to connect to server when running docker django container 【发布时间】:2017-06-02 06:30:46 【问题描述】:我查看了此站点上的问题,但无法解决此问题。
我创建并运行了我的 django 应用程序的图像,但是当我尝试从浏览器查看应用程序时,页面无法加载(无法建立与服务器的连接)
我使用的是 docker 工具箱,我使用的是 OS X El Capitan,而 Macbook 是 2009 年的。
容器IP为:192.168.99.100
django 项目根目录名为“Web app”,是包含manage.py 的目录。我的 Dockerfile 和 requirements.txt 文件都在这个目录中。
我的 dockerfile 是:
FROM python:3.5
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
我的 requirements.txt 有 django 和 mysqlclient
我的 django 应用程序使用 Mysql,我尝试在浏览器中查看 dockerized django 应用程序,无论是否将其链接到标准 mysql 映像。在这两种情况下,我只看到以下错误:
问题加载页面无法建立与服务器的连接
当我尝试将 django 容器链接到我使用的 mysql 容器时:
docker run --link mysqlapp:mysql -d app
其中 mysqlapp 是我的 mysql 映像,“app”是我的 django 映像。
在我的 django settings.py 中,允许的主机是:
ALLOWED_HOSTS: ['localhost', '127.0.0.1', '0.0.0.0', '192.168.99.100']
再一次,我使用docker build时镜像创建成功,并且作为容器成功运行。为什么页面没有在浏览器中加载?
【问题讨论】:
【参考方案1】:我建议使用 yml 文件和 docker compose。以下是帮助您入门的模板:
[Dockerfile]
FROM python:2.7
RUN pip install Django
RUN mkdir /code
WORKDIR /code
COPY code/ /code/
您的文件在代码目录中的位置。
[docker-compose.yml]
version: '2'
services:
db:
image: mysql
web0:
build: .
command: python manage.py runserver 0.0.0.0:8000
ports:
- "8000:8000"
depends_on:
- db
您在 Dockerfile 中定义的工作目录路径可能存在问题。希望以上有所帮助。
【讨论】:
【参考方案2】:salehinejad 提供的解决方案似乎已经足够好了,虽然我没有亲自测试过,但是如果你不想使用 yml 文件并想按照自己的方式进行,那么你应该通过添加来公开端口
-p 0:8000
在你的运行命令中
所以你应该看起来像这样:
docker run -p 0:8000 --link mysqlapp:mysql -d app
【讨论】:
【参考方案3】:我怀疑您没有告诉 Docker 与您的虚拟机对话,并且您的容器正在您的主机上运行(如果您可以在 localhost 访问,这就是问题所在)。
请参阅此帖子以获得解决方案:
Connect to docker container using IP
【讨论】:
以上是关于运行docker django容器时无法连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章
Django docker 容器无法连接到 mysql 容器,出现错误“无法连接到 'db' (111) 上的 MySQL 服务器”)
无法连接到在本地 Docker 容器中运行的 Go GRPC 服务器
在 Docker 容器中运行 .Net 5 API 时无法连接到 Postgres