一个答案是 devpi 辅助容器。您启动 docker devpi 映像并让它公开端口 3141。然后您可以使用 docker 文件中的环境变量将其添加为 pip install 的额外源。
使用 docker compose 启动 devpi:
devpi:
image: scrapinghub/devpi
container_name: devpi
expose:
- 3141
volumes:
- /path/to/devpi:/var/lib/devpi
myapp:
build: .
external_links:
- devpi:devpi
docker-compose up -d devpi
现在您需要配置客户端 docker 容器。它需要配置 pip:
在您的 Dockerfile 中: ENV PIP_EXTRA_INDEX_URL= http://devpi:3141/root/pypi/+simple/ \ PIP_TRUSTED_HOST=devpi
通过登录到您的容器来检查它是否正常工作:
docker-compose run myapp bash
pip install --verbose nose
输出应包括
2 location(s) to search for versions of nose:
* https://pypi.python.org/simple/nose/
* http://devpi:3141/root/pypi/+simple/nose/
现在您可以从另一个容器或 sftp 将包上传到您的容器。
这种方法的优点是可以加快构建速度,但如果 devpi 容器不存在,则不会破坏它们。
注意:不要在没有强密码的情况下将端口发布到 devpi,因为这是一个安全问题。人们可以使用它来上传您的应用程序将安装和执行的任意代码。