Django Docker容器拒绝连接

Django Docker容器拒绝连接,django,mongodb,docker,docker-compose,dockerfile,Django,Mongodb,Docker,Docker Compose,Dockerfile,我已经为此挣扎了很长时间 我有一个Django应用程序,我正在尝试将其打包到容器中 问题是,当我发布到某个端口(8001)时,主机会拒绝我的连接 $ docker-machine ip default 192.168.99.100 当我试图通过浏览器192.168.99.100:8001卷曲或接触时,连接被拒绝 C:\Users\meow>curl 192.168.99.100:8001 curl: (7) Failed to connect to 192.168.99.100 port

我已经为此挣扎了很长时间

我有一个Django应用程序,我正在尝试将其打包到容器中

问题是,当我发布到某个端口(8001)时,主机会拒绝我的连接

$ docker-machine ip default
192.168.99.100
当我试图通过浏览器192.168.99.100:8001卷曲或接触时,连接被拒绝

C:\Users\meow>curl 192.168.99.100:8001
curl: (7) Failed to connect to 192.168.99.100 port 8001: Connection refused
第一句话:我正在使用Docker工具箱

让我们从docker-compose.yml文件开始

version: '2'
services:
  db:
    build: ./MongoDocker
    image: ockidocky_mongo
  web:
    build: ./DjangoDocker
    image: ockidocky
    #volumes: .:/srv
    ports: 
    - 8001:8000
    links: 
    - db
第二句话:这个文件最初给我带来了一些关于从头开始建立权限的麻烦。为了解决这个问题,我分别构建了这些图像

docker build -t ockidocky .
docker build -t ockidocky_mongo .
以下是Mongo的dockerfile:

# Based on this tutorial. https://devops.profitbricks.com/tutorials/creating-a-mongodb-docker-container-with-an-attached-storage-volume/
# Removed some sudo here and there because they are useless in Docker for Windows

# Set the base image to use to Ubuntu
FROM ubuntu:latest
# Set the file mantainer
MAINTAINER meow

RUN apt-key adv --keyserver  hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 && \
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee /etc/apt/sources.list.d/mongodb.list && \
apt-get update && apt-get install -y mongodb-org


VOLUME ["/data/db"]
WORKDIR /data

EXPOSE 27017
#Edited with --smallfiles (Check this issue https://github.com/dockerfile/mongodb/issues/9)
CMD ["mongod", "--smallfiles"]
Django的Dockerfile基于其他教程

我不会包含代码,但它是有效的

重要的是,最后一行是:

ENTRYPOINT ["/docker-entrypoint.sh"]
我将docker-entrypoint.sh更改为在没有Gunicorn的情况下运行

echo Start Apache server.
python manage.py runserver
此时,
docker ps
告诉我一切正常:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
ddfdb20c2d7c        ockidocky             "/docker-entrypoint.s"   9 minutes ago       Up 9 minutes        0.0.0.0:8001->8000/tcp   ockidocky_web_1
2e2c2e7a5563        ockidocky_mongo       "mongod --smallfiles"    2 hours ago         Up 9 minutes        27017/tcp                ockidocky_db_1
当我运行docker inspect ockidocky和about ports时,它会显示:

"Ports": {
                "8000/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "8001"
                    }
                ]
            },
这取决于安装量吗

这是我真的弄不明白的事情之一,给了我很多关于Docker工具箱的错误

据我所知,在构建过程中,一切都很好,据我所知,被拒绝的连接不应该依赖于此

编辑: 在连接到容器并用
ps-aux
列出进程之后,我看到:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.7  3.0 218232 31340 ?        Ssl  20:15   0:01 python manage.p
root         9 13.1  4.9 360788 50132 ?        Sl   20:15   0:26 /usr/bin/python
root        15  0.0  0.2  18024  2596 ?        Ss   20:15   0:00 /bin/bash
root        20  0.1  0.3  18216  3336 ?        Ss   20:17   0:00 /bin/bash
root        33  0.0  0.2  34424  2884 ?        R+   20:18   0:00 ps -aux

另外,请随意建议我如何使这个项目对我自己来说更容易

我解决了这个问题。我不知道为什么我必须在这行
docker entrypoint.sh
中指定门:

python manage.py runserver 0.0.0.0:8000
现在,
docker日志ockidocky\u web\u 1
显示了常用的django输出消息


如果有人能给出正确的解释,我很乐意编辑并更新投票。

我也有同样的问题,此外,Django settings.py中允许的\u主机需要包括docker机器IP。

这主要是因为您要在所需端口上运行的服务出现故障(在您的情况下,所需端口是8001)

如果任何网络检查都正常,并且您的网络没有任何问题,只需检查您的服务,它将在您所需的端口上侦听!很有可能,您的服务未成功加载或运行


检查您的服务取决于您正在运行的服务,但有时(大多数情况下)
docker记录您的\u CONTAINER\u ID
可以帮助您了解更多有关失败原因的信息

Django服务器运行在哪个主机/接口上?(需要是0.0.0.0,这是默认值吗?)我知道它不是用于Flask的。可能是因为mongo侦听
27017
?是的,但OP正在尝试连接到Django。docker logs ockidocky显示了什么?您是否尝试连接到正在运行的容器并检查Django是否正在实际运行?好的。日志仅显示以下内容:
$docker Logs ockidocky\u web\u 1启动Apache服务器。
我想Django还没有启动。我还连接到容器并列出了进程。我已经编辑了这个问题。