本地 pypi 服务器在注册包时告诉我 403 Forbidden
Local pypi server tells me 403 Forbidden when registering packages
我正在尝试部署一个 pypi-server 来托管我们的内部包。我一直对这个 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
的文件,其中包含一对 username/password。
如果我在本地完成 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
但是,如果我构建 运行 docker 文件,然后尝试在其中注册,它不起作用:
pypi 运行ning里面docker:
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 容器中?有人自己试过吗?
更新
看起来 docker 容器正在侦听端口 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
或创建具有 ports
定义的 docker-compose.yml 文件。
见https://docs.docker.com/engine/reference/builder/#expose and https://docs.docker.com/compose/compose-file/#ports
我正在尝试部署一个 pypi-server 来托管我们的内部包。我一直对这个 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
的文件,其中包含一对 username/password。
如果我在本地完成 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
但是,如果我构建 运行 docker 文件,然后尝试在其中注册,它不起作用:
pypi 运行ning里面docker:
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 容器中?有人自己试过吗?
更新
看起来 docker 容器正在侦听端口 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
或创建具有 ports
定义的 docker-compose.yml 文件。
见https://docs.docker.com/engine/reference/builder/#expose and https://docs.docker.com/compose/compose-file/#ports