gpt4 book ai didi

docker-compose:为多个服务使用多个 Dockerfile

转载 作者:IT老高 更新时间:2023-10-28 12:43:49 24 4
gpt4 key购买 nike

我正在使用 docker-compose,我想为不同服务的构建步骤使用不同的 Dockerfile。 docs似乎建议将不同的 Dockerfile 放在不同的目录中,但我希望它们都在同一个目录中(并且可能使用以下约定可以区分:Dockerfile.postgres、Dockerfile.main ...)。这可能吗?

编辑:我的场景包含这个 docker-compose 文件:

main:
build: .
volumes:
- .:/code
environment:
- DEBUG=true

postgresdb:
extends:
file: docker-compose.yml
service: main
build: utils/sql/
ports:
- "5432"
environment:
- DEBUG=true

postgresdb 的 Dockerfile 在哪里:

FROM postgres

# http://www.slideshare.net/tarkasteve/developerweek-2015-docker-tutorial
ADD make-db.sh /docker-entrypoint-initdb.d/

主要是:

FROM python:2.7

RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/

RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . /code/

现在可以使用,但我想通过调用 Python 脚本来扩展 postgresdb 的 Dockerfile,该脚本根据基于 SQL Alchemy 构建的模型在数据库中创建表(Python 脚本将是称为 python manage.py create_tables)。我想将它添加到 db 的 Dockerfile 中,但由于容器的隔离,我不能在那里使用 SQL Alchemy,因为该图像基于 postgres 图像而不是 Python 的,并且它没有t 包含 sqlalchemy 包...

我能做什么?我尝试在 postgresdb 中使用 main 服务,但不幸的是它没有携带 python 及其包,所以我仍然无法编写一个单独的 Dockerfile 来创建Postgres 数据库(通过 shell 脚本)及其表(通过 Python 脚本)。

最佳答案

您必须将其添加到构建部分。因此,您可以为每个服务指定不同的替代 dockerfile。

services:
service1:
build:
context: .
args:
- NODE_ENV=local
dockerfile: Dockerfile_X
ports:
- "8765:8765"

关于docker-compose:为多个服务使用多个 Dockerfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29835905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com