连接在Dockerfile中被拒绝,但在中执行时未被拒绝
我有一个调用本地docker容器服务器的命令 我使用连接在Dockerfile中被拒绝,但在中执行时未被拒绝,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我有一个调用本地docker容器服务器的命令 我使用docker-compose-run-name\u of\u-service/bin/bash执行到一个图像中,从那里调用下面的命令可以正常工作 pip install --trusted-host pypi --extra-index-url http://pypi:8000 -r requirements.txt 但在Dockerfile中运行几乎相同的命令会导致重试错误 RUN pip install --trusted-host py
docker-compose-run-name\u of\u-service/bin/bash
执行到一个图像中,从那里调用下面的命令可以正常工作
pip install --trusted-host pypi --extra-index-url http://pypi:8000 -r requirements.txt
但在Dockerfile中运行几乎相同的命令会导致重试错误
RUN pip install --trusted-host pypi --extra-index-url http://pypi:8000 -r requirements.txt --user
Dockerfile
RUN
指令永远不能对其他服务进行网络调用,即使在同一个docker compose.yml
文件中也是如此。您需要安排包服务器在“其他地方”运行(即使是在Docker中,但单独启动也可能有效)
在技术层面,有两个问题。Compose假定所有映像生成都发生在任何容器启动之前,因此在生成服务
映像之前无法要求启动pypi
服务(取决于:
不影响构建阶段)。映像构建也没有连接到Compose创建的Docker网络,因此它们不能执行诸如解析容器主机名之类的操作;这将导致您得到的特定错误
可以将其拆分为两个单独的composeYAML文件,一个用于包服务器,另一个用于主服务。您可以启动包服务器;然后docker编写构建主服务;然后停止包服务器。由于您已发布端口:
您可以通过主机的一个IP地址访问包服务器;或者,如果您在MacOS或Windows主机上,则使用特殊主机名host.docker.internal
;或者使用中描述的技术之一
(根据此包服务器中的具体内容,您可能根本不需要它。如果您
python setup.py bdist_wheel
或pip wheel
保留在那里的依赖项,您可以将生成的.whl
文件复制到映像中并直接安装。如果所有文件都来自同一源代码树,则可以使用多个源代码。)-阶段构建,早期阶段只构建库也可以工作。)他们是同一个docker compose.yml吗?@Stefano是的,是同一个docker compose.yml。是否有可能将yaml的两个版本添加到Post中?感谢如此详细的回答!我的计划是将此服务部署到一个网站并调用它,但我还没有得到它,所以在本地进行。关于复制轮子,有一个命令可以启动将控制盘加载到远程存储库中,我发现这比将它们移动到服务器或在包中进行更容易。
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f54bac2dad0>: Failed to establish a new connection: [Errno -2] Name or service not known')': /custom-utils/
service:
image: service:20.10.1
build:
context: platform
dockerfile: service/Dockerfile
depends_on:
- api
- pypi
environment:
PORT: "8088"
ports:
- "8088:8088"
volumes:
- some_location_of_source
restart: always
pypi:
image: pypi:20.10.1
build:
context: services/pypi
dockerfile: Dockerfile
environment:
PORT: "8000"
expose:
- "8000"
ports:
- "8000:8000"
volumes:
- some_location_of_source
RUN pip install \
--extra-index-url http://host.docker.internal:8000 \
-r requirements.txt