Docker 仅在 windows 10 下出现网络问题
Docker networking issue only under windows 10
我有一个 Dockerfile 和我在 OSX 上开发的 docker-compose.yml。看起来像这样:
cat Dockerfile
:
FROM alpine:3.7
ADD ./app /home/app/
WORKDIR /home/app/
RUN apk add --no-cache postgresql-dev gcc python3 python3-dev musl-dev && \
python3 -m ensurepip && \
rm -r /usr/lib/python*/ensurepip && \
pip3 install --upgrade pip setuptools && \
rm -r /root/.cache && \
pip3 install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["python3", "app.py"]
cat docker-compose.yml
:
version: "3"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- ./app/:/home/app/
depends_on:
- db
db:
image: postgres:10
environment:
- POSTGRES_USER=testusr
- POSTGRES_PASSWORD=password
- POSTGRES_DB=testdb
expose:
- 5432
然后我开始通过:docker-compose up --build -d
并在端口 5000 上打开 Web 浏览器,它显示了一个表单(如预期的那样)。同样,这在 OSX 上非常有效。
然而,在 Windows 10 上它只显示一个空白页。 docker port <CONTAINER>
显示 5000/tcp -> 0.0.0.0:5000
所以我知道它绑定到正确的端口。
此外,如果我 docker logs -f <python container>
它不会显示请求到达容器。通常会为每个 flask/nginx 响应打印一个新行(w/status 代码)。在这种情况下,它看起来甚至没有到达 python 应用程序容器。
那么,知道为什么这对 Windows 不起作用吗?
所以答案是你必须使用docker-machine ip
来查看容器绑定到什么IP。它不像在 OSX 上那样只绑定到 localhost/127.0.0.1。
我有一个 Dockerfile 和我在 OSX 上开发的 docker-compose.yml。看起来像这样:
cat Dockerfile
:
FROM alpine:3.7
ADD ./app /home/app/
WORKDIR /home/app/
RUN apk add --no-cache postgresql-dev gcc python3 python3-dev musl-dev && \
python3 -m ensurepip && \
rm -r /usr/lib/python*/ensurepip && \
pip3 install --upgrade pip setuptools && \
rm -r /root/.cache && \
pip3 install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["python3", "app.py"]
cat docker-compose.yml
:
version: "3"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- ./app/:/home/app/
depends_on:
- db
db:
image: postgres:10
environment:
- POSTGRES_USER=testusr
- POSTGRES_PASSWORD=password
- POSTGRES_DB=testdb
expose:
- 5432
然后我开始通过:docker-compose up --build -d
并在端口 5000 上打开 Web 浏览器,它显示了一个表单(如预期的那样)。同样,这在 OSX 上非常有效。
然而,在 Windows 10 上它只显示一个空白页。 docker port <CONTAINER>
显示 5000/tcp -> 0.0.0.0:5000
所以我知道它绑定到正确的端口。
此外,如果我 docker logs -f <python container>
它不会显示请求到达容器。通常会为每个 flask/nginx 响应打印一个新行(w/status 代码)。在这种情况下,它看起来甚至没有到达 python 应用程序容器。
那么,知道为什么这对 Windows 不起作用吗?
所以答案是你必须使用docker-machine ip
来查看容器绑定到什么IP。它不像在 OSX 上那样只绑定到 localhost/127.0.0.1。