大家好。我正在使用Docker并尝试将一个简单的Django应用程序docker化,该应用程序对一个网页(真实网站)进行外部http连接。当我在Docker文件中设置了Django服务器的地址以在容器中工作时-127.0.0.1:8000,我的应用程序无法正常工作,因为无法对该网站进行外部连接。
但是,当我为我的服务器设置端口:0.0.0.0:8000时,它开始工作。 所以我的问题是:为什么会这样呢?在这种特殊情况下有什么区别?我只是想理解它。
我阅读了一些关于0.0.0.0的文章,它像是一种“通用”或“占位符”端口,允许使用OC默认端口。
127.0.0.1就像一个主机,将请求重定向到当前计算机。我知道这一点。 但是,当我在本地计算机上运行应用程序(主机:127.0.0.0:8000)时,一切都正常工作,应用程序可以连接到真实网站,但在Docker的情况下,它停止工作。
感谢任何帮助!
这是我的源代码: Docker文件
但是,当我为我的服务器设置端口:0.0.0.0:8000时,它开始工作。 所以我的问题是:为什么会这样呢?在这种特殊情况下有什么区别?我只是想理解它。
我阅读了一些关于0.0.0.0的文章,它像是一种“通用”或“占位符”端口,允许使用OC默认端口。
127.0.0.1就像一个主机,将请求重定向到当前计算机。我知道这一点。 但是,当我在本地计算机上运行应用程序(主机:127.0.0.0:8000)时,一切都正常工作,应用程序可以连接到真实网站,但在Docker的情况下,它停止工作。
感谢任何帮助!
这是我的源代码: Docker文件
FROM python:3.6
RUN mkdir /code
WORKDIR /code
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . ./
EXPOSE 8000
ENTRYPOINT [ "python", "manage.py" ]
CMD [ "runserver", "127.0.0.1:8000" ] # doesn't work
# CMD [ "runserver", "0.0.0.0:8000" ] - works
docker-compose.yml
version: "3"
services:
url_rest:
container_name: url_keys_rest
build:
context: .
dockerfile: Dockerfile
image: url_keys_rest_image
stdin_open: true
tty: true
volumes:
- .:/var/www/url_keys
ports:
- "8000:8000"
以下是我在127.0.0.1的情况下收到的HTTP错误信息,或许对你有帮助。
http: error: ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=8000): Max retries exceeded with url: /api/urls (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10cd51e80>: Failed to establish a new connection: [Errno 61] Connection refused')) while doing GET request to URL: http://127.0.0.1:8000/api/urls