繁体   English   中英

访问 Dockerfile 中的 container_name(来自 docker-compose)

[英]Access container_name in Dockerfile (from docker-compose)

我已经设置了一个 docker-compose 项目,它正在创建多个图像:

cache_server:
    image: current_timezone/full-supervisord-cache-server:1.00
    container_name: renamed-varnish-cache
    networks:
      - network_frontend
    build:
      context: "./all-services/"
      dockerfile: "./cache-server/Dockerfile.cacheserver.varnish"
      args:
        - DOCKER_CONTAINER_USERNAME=username
    ports:
      - "6081:6081"
      - "6082:6082"

当我使用docker-compose up -f file1.yml file2.override.yml我将获得容器:在上述情况下,它将被命名为: renamed-varnish-cache

在相应的 Dockerfile ( ./nginx-proxy/Dockerfile.proxy.nginx ) 中,我希望能够使用上面显示的docker-compose.yml中定义的container_name属性。

创建容器后,我想更新 Dockerfile 内的 Varnish 配置: RUN sed -i "s|webserver_container_name|renamed-varnish-cache|g" /etc/varnish/default.vcl"

例如:

    backend webserver_container_name{
        .host = "webserver_container_name";
        .port = "8080";
    }

致:我预计我将不得不将后端的-替换为_

    backend renamed_varnish_cache{
        .host = "renamed-varnish-cache";
        .port = "8080";
    }

有没有办法接收 docker-compose 命名项目作为Dockerfile 中的变量?

在核心 Docker 中,有两个独立的概念。 映像是某些软件及其依赖项打包在一起的构建版本; 容器是图像的运行实例。 有单独的docker builddocker run命令来构建镜像和启动容器,您可以从单个镜像启动多个容器。

Docker Compose 包装了这些概念。 特别是build:块对应于 image-build 步骤,这就是调用 Dockerfile 的内容。 Dockerfile 中没有其他 Compose 选项可用或可见。 您无法访问container_name:environment: variables 或volumes:因为它们在构建生命周期中此时不存在; 您也无法从 Dockerfile 内部联系其他 Compose 服务。

如果多个容器具有基本相同的代码库但需要不同的顶级命令,那么让多个容器从同一个映像运行是很常见的。 一个例子是 Python Django 应用程序需要 Celery 后台工作程序; 您将拥有相同的项目结构,但 Celery 工作人员的命令不同。

version: '3.8'
services:
  web:
    build: .
    image: my/django-app
  worker:
    image: my/django-app
    command: celery worker ...

现在使用此堆栈,您可以docker-compose build以构建一个映像,然后运行docker-compose up以从该映像启动两个容器。 (在构建期间,您无法知道容器名称是什么,并且会有两个容器名称,因此您不能只在 Dockerfile 中使用一个。)

在设计级别,这意味着您通常不能在映像本身中包含配置类型设置(其他容器的主机名、主机共享文件系统的用户 ID)。 如果您的应用程序允许您将这些内容指定为环境变量,那么这是最简单的选择。 您可以使用绑定挂载 ( volumes: :) 来注入整个配置文件。 如果这些都不适合您,您可以使用入口点脚本来重写配置文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM