Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问Dockerfile中的容器名称(来自docker compose)_Docker_Docker Compose_Dockerfile - Fatal编程技术网

访问Dockerfile中的容器名称(来自docker compose)

访问Dockerfile中的容器名称(来自docker compose),docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我已设置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/"

我已设置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
时,我将获得容器:在上述容器的情况下,它将被命名为:
重命名的varnish cache

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

创建容器时,我希望在Dockerfile中内联更新Varnish配置:
运行sed-I“s|webserver_container_name |重命名Varnish cache|g”/etc/Varnish/default.vcl“

例如:

    backend webserver_container_name{
        .host = "webserver_container_name";
        .port = "8080";
    }
收件人:我预计我将不得不将
-
替换为
\
作为后端:


有没有办法在docker文件中接收docker compose命名项作为变量?

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

Docker Compose包装了这些概念。特别是,
构建:
块对应于图像构建步骤,这就是调用Docker文件的步骤。Docker文件中没有可用或可见的其他撰写选项。您无法访问
容器名称:
环境:
变量ables或
卷:
,因为它们在构建生命周期的此时不存在;您也不能从Dockerfile内部联系其他Compose服务

如果多个容器基本上具有相同的代码基,但需要不同的顶级命令,那么在同一个映像上运行多个容器是很常见的。例如,Python Django应用程序需要芹菜后台工作程序;您可以使用相同的项目结构,但芹菜工作程序的命令不同

版本:“3.8”
服务:
网状物:
生成:。
图片:my/django应用程序
工人:
图片:my/django应用程序
指挥:芹菜工人。。。
现在,使用此堆栈,您可以
docker compose build
构建一个映像,然后运行
docker compose up
从该映像启动两个容器。(在构建过程中,您无法知道容器名称是什么,并且将有两个容器名称,因此您不能仅在Dockerfile中使用一个。)


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

您可以从同一映像启动多个容器,因此您无法知道在映像构建时(在Dockerfile中)最终的容器名称。我试图在我的问题
中推断docker compose up-f file1.yml file2.override.yml
,这意味着我在docker compose文件中指定了容器名称,换句话说,如果我有多个容器,我会使用另一个覆盖文件。我希望随后动态填充这些文件。也许我错过了图像生成的概念具有预定义名称的ds,如果您覆盖docker compose文件,它们仍将使用旧图像,而不会创建新图像;这就是您试图告诉我的吗?“只要我运行
docker compose up-d
,它就会获取旧图像,而不会重新创建新图像?“不知道你是不是这个意思?如果是这样的话,docker compose的实用性就没那么好了。谢谢你的详细回答。我已经在忙于使用entrypoint而不是
RUN
,因为你上面的评论暗示我做错了什么。另外一个问题,我想与此类似-你能在这方面帮助我吗。从这个问题可以看出,我确实使用了您解释的这个概念(基本图像到多个子图像),但不知何故,我确实误解了docker compose可以为我做什么。请你也看一看,因为那里没有人回答。
    backend renamed_varnish_cache{
        .host = "renamed-varnish-cache";
        .port = "8080";
    }