Docker - pip 在 docker.compose 上的共享卷中安装所有 requirements.txt 文件
Docker - pip install all requirements.txt files in shared volume on docker.compose up
我正在尝试使用 docker-compose 与其他容器共享 python 模块,确保这些容器都安装了 100% 的 requirements.txt 文件 pip。
我已经能够使用卷与其他容器(在 /src/shared-modules)共享共享的 python 模块。但是,我正在努力使 /src/shared-modules.
中找到的所有 requirements.txt 文件的 'pip installing' 自动化
Dockerfile 如下所示:
FROM python:3.6.5
COPY . /src
**#Run pip install on all found requirements.txt files in the container**
RUN for req in `find . -name requirements.txt -type f`; do pip install --trusted-host pypi.org -r $req; done
WORKDIR /src
这适用于复制到容器的主机文件夹中的所有内容,但不适用于 /src/shared-modules 文件夹中的任何内容。也许它们在 docker 文件中的 pip install 命令是 运行 时还不存在,或者它们可能还没有链接到源共享模块容器?
docker-compose.yaml 看起来像这样:
db:
image: tutum/mongodb
shared-modules:
build: ./shared-modules
volumes:
- "shared-modules:/src/shared-modules"
web:
build: ./django-site
entrypoint: "python manage.py runserver 0.0.0.0:8000"
volumes:
- "shared-modules:/src/shared-modules"
volumes:
shared-modules:
我尝试将 pip 安装添加到 docker-compose-yaml 文件中的入口点 + 命令命令,如下所示:
web:
build: ./django-site
entrypoint: /bin/bash
command: "for req in `find /src/shared-modules -name requirements.txt -type f`; do pip install --trusted-host pypi.org -r $req; done && python manage.py runserver 0.0.0.0:8000"
volumes:
- "shared-modules:/src/shared-modules"
我希望这会 运行 已创建容器上的命令,该容器已链接到共享模块容器,但未安装 /src/shared-modules 的 requriemtns.txt 文件docker-撰写。
for req in find . -name requirements.txt -type f
; do pip install
--trusted-host pypi.org -r $req; done
命令有效,但前提是我在创建后附加到 运行ning 容器并手动执行它。作为 docker-compose up 过程的一部分,我真的很想将其自动化。
在 docker-compose up 过程中分配卷后,如何在容器上执行 bash 命令?
有更好的方法吗?
我不太明白你的一般方法。
如果你想确保所有容器都安装了所有 python 包,只需通过 运行 在 Dockerfile 中安装它们 'normally'
pip install -r requirements.txt
也许考虑一个所有容器共享的基本 Dockerfile。
这可能包括所有安装。
你的音量方法看起来很老套。可能不值得让它发挥作用。
尽管 Docker 的文档中有一些关于 Saskia 提到的 Docker 文件方法的示例,但我认为您的原始方法没有任何问题。 Dockerfile-approach 对于小型项目来说可能很简单,但是在构建包含多个服务的更大类型的基础设施时,使用卷挂载更明确和可读。但这当然取决于用例。
我喜欢做多个 .yml 文件,例如 build.yml,我可能在其中拥有与主要 docker-compose.yml 相同的服务。这些服务将为自己安装需求,或者他们需要做的任何构建逻辑。我可以使用 运行 docker-compose -f build.yml up
的 build.yml,然后喝杯咖啡,观察整个系统是如何同时构建的。之后 docker-compose up
应该可以工作,因为已经安装了要求。
我正在尝试使用 docker-compose 与其他容器共享 python 模块,确保这些容器都安装了 100% 的 requirements.txt 文件 pip。
我已经能够使用卷与其他容器(在 /src/shared-modules)共享共享的 python 模块。但是,我正在努力使 /src/shared-modules.
中找到的所有 requirements.txt 文件的 'pip installing' 自动化Dockerfile 如下所示:
FROM python:3.6.5
COPY . /src
**#Run pip install on all found requirements.txt files in the container**
RUN for req in `find . -name requirements.txt -type f`; do pip install --trusted-host pypi.org -r $req; done
WORKDIR /src
这适用于复制到容器的主机文件夹中的所有内容,但不适用于 /src/shared-modules 文件夹中的任何内容。也许它们在 docker 文件中的 pip install 命令是 运行 时还不存在,或者它们可能还没有链接到源共享模块容器?
docker-compose.yaml 看起来像这样:
db:
image: tutum/mongodb
shared-modules:
build: ./shared-modules
volumes:
- "shared-modules:/src/shared-modules"
web:
build: ./django-site
entrypoint: "python manage.py runserver 0.0.0.0:8000"
volumes:
- "shared-modules:/src/shared-modules"
volumes:
shared-modules:
我尝试将 pip 安装添加到 docker-compose-yaml 文件中的入口点 + 命令命令,如下所示:
web:
build: ./django-site
entrypoint: /bin/bash
command: "for req in `find /src/shared-modules -name requirements.txt -type f`; do pip install --trusted-host pypi.org -r $req; done && python manage.py runserver 0.0.0.0:8000"
volumes:
- "shared-modules:/src/shared-modules"
我希望这会 运行 已创建容器上的命令,该容器已链接到共享模块容器,但未安装 /src/shared-modules 的 requriemtns.txt 文件docker-撰写。
for req in
find . -name requirements.txt -type f
; do pip install --trusted-host pypi.org -r $req; done
命令有效,但前提是我在创建后附加到 运行ning 容器并手动执行它。作为 docker-compose up 过程的一部分,我真的很想将其自动化。
在 docker-compose up 过程中分配卷后,如何在容器上执行 bash 命令?
有更好的方法吗?
我不太明白你的一般方法。
如果你想确保所有容器都安装了所有 python 包,只需通过 运行 在 Dockerfile 中安装它们 'normally'
pip install -r requirements.txt
也许考虑一个所有容器共享的基本 Dockerfile。
这可能包括所有安装。
你的音量方法看起来很老套。可能不值得让它发挥作用。
尽管 Docker 的文档中有一些关于 Saskia 提到的 Docker 文件方法的示例,但我认为您的原始方法没有任何问题。 Dockerfile-approach 对于小型项目来说可能很简单,但是在构建包含多个服务的更大类型的基础设施时,使用卷挂载更明确和可读。但这当然取决于用例。
我喜欢做多个 .yml 文件,例如 build.yml,我可能在其中拥有与主要 docker-compose.yml 相同的服务。这些服务将为自己安装需求,或者他们需要做的任何构建逻辑。我可以使用 运行 docker-compose -f build.yml up
的 build.yml,然后喝杯咖啡,观察整个系统是如何同时构建的。之后 docker-compose up
应该可以工作,因为已经安装了要求。