运行Docker Django容器时无法连接服务器

3
我浏览了这个网站上的问题,但是我无法解决这个问题。
我创建并运行了我的Django应用程序的镜像,但是当我尝试从浏览器查看该应用程序时,页面无法加载(无法连接到服务器)。
我正在使用Docker Toolbox,我正在使用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 数据库,在浏览器中尝试查看 Docker 镜像化的 Django 应用程序时,我尝试连接标准 mysql 镜像并未连接。但是两种情况下我只看到如下错误:

问题加载页面,无法建立与服务器的连接

当我尝试将 django 容器链接到 mysql 容器时,我使用了以下命令:

docker run --link mysqlapp:mysql -d app

其中,mysqlapp是我的mysql镜像,'app'是我的django镜像。

在我的django settings.py文件中,allowed hosts为:

ALLOWED_HOSTS: ['localhost', '127.0.0.1', '0.0.0.0', '192.168.99.100']

使用docker build时,镜像已成功创建,并作为容器成功运行。但为什么在浏览器中无法加载页面?

3个回答

4
我建议使用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中定义的工作目录路径可能存在问题。希望以上内容能够帮到您。


3
salehinejad提供的解决方案似乎已经足够好了,虽然我个人没有测试过,但如果您不想使用yml文件并且想要自行操作,则应通过添加

-p 0:8000

在运行命令中公开端口。
因此,您的命令应该像这样:
docker run -p 0:8000 --link mysqlapp:mysql -d app 

0

我怀疑您没有告诉Docker与您的虚拟机通信,而是您的容器正在运行在主机上(如果您可以通过localhost访问,那么这就是问题所在)。

请参考以下帖子解决:

使用IP连接到Docker容器


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接