首页 > 解决方案 > 如何访问 Docker 容器和主机中的服务器?

问题描述

我使用 Docker3.3.1 并在 MacOS Catalina 10.15.7 上运行以下 python 容器

docker  run --add-host host.docker.internal:host-gateway --name  pythonserver --restart=always  -p  5011:5000  \
-v /Users/python-server:/opt1 \
-v /Users/python-server/flask_config.py:/opt1/flask_config.py \
-v  /Users/python-server/start.sh:/opt1/start.sh \
--dns 114.114.114.114 --dns 8.8.8.8 \
-e TZ="Asia/Shanghai" -v  /etc/localtime:/etc/localtime \
-d  python-server

而在flask_config.py中,我用andhost.docker.internal 代替,比如“mysql+pymysql://root:123456@host.docker.internal:3306”localhost127.0.0.1

Docker容器可以成功运行,我可以看到和其他服务器一样的日志,但是我无法访问python容器和主机中的服务器,

当我lsof -Pni | grep 5011在主机上输入时,输出:

com.docke   546 elsa   92u  IPv6 0x26f267ef******      0t0  TCP *:5011 (LISTEN)

当我打字curl host.docker.internal:5011时,我得到了curl: (52) Empty reply from server

我的 Dockerfile1 图像pythonserver-pack如下:

FROM pymor/python_3.7
  
RUN mkdir /opt1

COPY ./requirements.txt /opt1
    
WORKDIR /opt1

RUN pip install --no-cache-dir -r requirements.txt
RUN apt-get update && apt-get install -y curl

和图像的 Dockerfile2pythonserver如下:

FROM pythonserver-pack

ADD /pythonserver /opt1

WORKDIR /opt1

RUN chmod +x start.sh

CMD ["sh","start.sh"]

当我docker exec -it pythonserver bash打字时lsof -Pni | grep 5000,我什么也没得到,我被困了好几天,谢谢你的建议。

标签: macosdockercontainers

解决方案


推荐阅读