运行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

Docker 容器无法连接到 Redis

无法连接到在 Docker 操场上运行的 mysql 服务器 docker 容器

无法连接到 ECS 中链接的 docker 容器