python - 本地 pypi 服务器在注册包时告诉我 403 Forbidden

标签 python docker dockerfile pypi pypiserver

我正在尝试部署 pypi-server 来托管我们的内部包。我一直对 pypi 在这个 docker 容器内的行为感到抓狂。

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"]

非常简单,对吧?当然,dockerfile 的姐妹还有一个名为 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

但是,如果我构建并运行 dockerfile,然后尝试在其中注册,它不起作用:

Pypi 在 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/#exposehttps://docs.docker.com/compose/compose-file/#ports

关于python - 本地 pypi 服务器在注册包时告诉我 403 Forbidden,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42849077/

相关文章:

python - Docker FileNotFound 上的 Pandas

python - 我是否以正确的方式使用 cython?

Windows 上带有 Docker 的 Linux 内核与 WSL Linux 内核不匹配

java - Dockerfile 中的 Maven + Java 应用程序

python - 无法在 Docker 镜像中安装 Python 数学库

git - Docker + SSH + Git 克隆问题

python - 如何在 Python 中将变量添加到 JSON 列表?

python - 将毫秒转换为小时、分钟和秒 python

Ubuntu + Vagrant + docker compose 不使用 Virtualbox

apache - 为什么只有当我进入容器的 bash 时才能访问我的 Apache 默认页面?