注册软件包时,本地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
定义。