从父目录生成Dockerfile

2024-09-27 00:13:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python应用程序,它使用芹菜工人,我想dockerise。不幸的是,python和celeri都使用相同的代码基。尽管它们必须是单独的容器以便于缩放。如果我单独构建它们并运行容器,它可以正常工作。当我引入docker compose时,问题就开始了,因此我无法交换代码文件夹中的dockerfiles,而容器需要从文件夹外部构建。文件夹结构如下:

/application
    /application-build
       Dockerfile
    /celery-build
       Dockerfile
    /code
       application.py
       otherfiles.py

我已经挖掘了一段时间了,不幸的是,据我所知,父目录中的文件不能复制到dockerfile中。虽然我想把相同的代码复制到两个容器中。 (请注意,下面的dockerfile不是我使用的那些文件。)

文件1:

^{pr2}$

文件2:

FROM python:3.6
ADD /code .
COPY /code/requirements.txt .
RUN python3.6 -m pip install -r requirements.txt
CMD ["celery","-A application.celery", "worker","work1@host"]

我看到的一个解决方案是重新组织文件夹,使代码目录始终是dockerfile目录的子目录,如下所示:

/application
   /application-build
      Dockerfile
      /celery-build
         Dockerfile
         /code
            application.py
            otherfiles.py

虽然看起来一点也不聪明。在


Tags: 文件代码pydockerfilebuild目录txt文件夹
2条回答

没有问题。在Dockerfile中,您不能退出(访问父文件夹)的构建上下文,而不是Dockerfile's文件夹。在

保持结构不变,并显式指定Dockerfile的路径:

docker build -t app -f application-build/Dockerfile . 
docker build -t celery -f celery-build/Dockerfile . 

在你的Dockerfiles里,记住路径是/application。因此,您可以轻松复制:

Dockerfile

^{pr2}$

用相当于docker build命令的Docker Compose来补充grapes的答案:

# docker-compose.yml
version: '3.7'

services:
  application:
    build:
      context: .
      dockerfile: application-build/Dockerfile

  celery:
    build:
      context: .
      dockerfile: celery-build/Dockerfile
^{pr2}$

当每个Dockerfile构建时,它将使用/application作为其构建上下文。在

相关问题 更多 >

    热门问题