【发布时间】:2016-11-28 16:22:20
【问题描述】:
我已经为此苦苦挣扎了一段时间。
我有一个 Django 应用程序,我正在尝试将它打包到容器中。
问题是当我发布到某个端口(8001)时,主机拒绝我的连接。
$ docker-machine ip default
192.168.99.100
当我尝试 curl 或通过浏览器 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 Toolbox。
让我们从 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"]
Dockerfile for Django 基于this 其他教程。
我不会包含代码,但它可以工作。
重要的是要说最后一行是:
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 和关于端口时,它会显示:
"Ports": {
"8000/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8001"
}
]
},
这是否取决于安装卷?
这是我真的想不通的事情之一,并且在使用 Docker Toolbox 时给我带来了很多错误。
据我所知,在构建过程中一切正常,据我所知,被拒绝的连接不应该依赖于此。
编辑:
在连接到容器并使用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
附:随意建议我如何使这个项目对自己更容易。
【问题讨论】:
-
您的 Django 服务器在哪个主机/接口上运行? (需要为 0.0.0.0,这是默认值吗?)我知道它不适用于 Flask。
-
可能是因为mongo听
27017? -
是的,但是 OP 正在尝试连接到 Django。
-
docker logs ockidocky显示什么?您是否尝试连接到正在运行的容器并检查 Django 是否实际运行? -
好的。日志只显示:
$ docker logs ockidocky_web_1 Start Apache server.我想 Django 还没有启动。我还连接到容器和列出的进程。我已经为此编辑了问题。
标签: django mongodb docker docker-compose dockerfile