注册软件包时,本地pypi服务器告诉我403 Forbidden

我正在尝试部署一个pypi-server来托pipe我们的内部软件包。 我一直拉着我的头发在这个docker集装箱内的pypi的行为。

Dockerfile

FROM python:3.5 RUN apt-get update RUN pip install --upgrade pip RUN pip install -U passlib pypiserver[cache]==1.2.0 RUN mkdir -p /src/pypi/packages EXPOSE 8080 ADD ./htpasswd /src/pypi/htpasswd CMD ["pypi-server", "-p 8080", "-P", "/src/pypi/htpasswd","/src/pypi/packages"] 

很简单,对吧? 姐姐到docker文件当然有一个名为htpasswd文件包含用户名/密码对。

如果我在本地(在Docker外部的环境中)完成了docker文件中定义的步骤,然后执行上面定义的命令,它就可以工作了! 我可以注册它的包。

在外面运行的Pypi Dockerfile:

 python setup.py register -r local running register running egg_info writing top-level names to ah_model.egg-info/top_level.txt writing dependency_links to ah_model.egg-info/dependency_links.txt writing ah_model.egg-info/PKG-INFO file foobar_utils.py (for module foobar_utils) not found reading manifest file 'ah_model.egg-info/SOURCES.txt' writing manifest file 'ah_model.egg-info/SOURCES.txt' running check Registering ah_model to http://localhost:8081 Server response (200): OK 

但是,如果我build立并运行dockerfile,然后尝试在里面注册,它不起作用:

泊坞内运行的Pypi:

 python setup.py register -r local running register running egg_info writing top-level names to ah_model.egg-info/top_level.txt writing ah_model.egg-info/PKG-INFO writing dependency_links to ah_model.egg-info/dependency_links.txt file foobar_utils.py (for module foobar_utils) not found reading manifest file 'ah_model.egg-info/SOURCES.txt' writing manifest file 'ah_model.egg-info/SOURCES.txt' running check Registering ah_model to http://localhost:8080 Server response (403): Forbidden 

pypi的工作方式是否需要特别调整,以便在docker集装箱内部工作? 有没有人试过这个?

UPDATE

看起来像泊坞窗容器正在侦听端口8080:

 root@a0ec19c89a9d:/src/pypi# netstat -tulpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1/python3.5 

Expose不会将端口暴露给主机。 要做到这一点,你需要使用-p-P或创build一个docker-compose.yml文件的ports定义。

请参阅https://docs.docker.com/engine/reference/builder/#expose和https://docs.docker.com/compose/compose-file/#ports