我正在尝试使用docker-compose与其他容器共享python模块,确保这些容器都安装了100%的requirements.txt文件pip。
我已经能够使用卷与其他容器共享共享的python模块(在/ src / shared-modules)。但是,我正在努力实现自动安装' / src / shared-modules中找到的所有requirements.txt文件。
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文件夹中的任何内容。也许它们在dockerfile中运行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 install添加到docker-compose-yaml文件中的entrypoint + command命令,如下所示:
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-compose上。
for
find . -name requirements.txt -type f
中的req;做pip安装 --trusted-host pypi.org -r $ req;完成
命令有效但只有在创建后附加到正在运行的容器并手动执行它。我真的希望将其作为docker-compose进程的一部分进行自动化。
如果在作为docker-compose up过程的一部分分配卷后,如何在容器上执行bash命令?
有更好的方法吗?
答案 0 :(得分:1)
我真的没有在这里得到你的一般方法
如果你想确保所有容器都安装了所有的python软件包,那就安装它们通常'在Dockerfile中运行
pip install -r requirements.txt
也许想想所有容器共享的基础Dockerfile
这可能包括所有安装。
你的音量方法看起来非常hacky。可能不值得让它发挥作用。
答案 1 :(得分:0)
即使Docker的文档中也有一些有关Saskia提及的Dockerfile方法的示例,但我认为您的原始方法没有任何问题。对于小型项目而言,Dockerfile方法可能很简单,但是当构建包含多个服务的更大类型的基础架构时,使用卷挂载更为明确和易读。但这当然取决于用例。
我喜欢做多个.yml文件,例如build.yml,其中可能具有与主docker-compose.yml中相同的服务。这些服务将自行安装需求,或者安装所需做的逻辑。我可以通过运行docker-compose -f build.yml up
使用build.yml,然后喝杯咖啡,观察整个系统如何同时建立。之后,docker-compose up
应该可以正常工作,因为已经安装了需求。