【发布时间】:2020-12-04 06:16:03
【问题描述】:
我已经设置了一个正在创建多个图像的 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 中的变量?
【问题讨论】:
-
您可以从同一个镜像启动多个容器,因此您无法知道镜像构建时最终的容器名称可能是什么(在 Dockerfile 中)。
-
我试图在我的问题
docker-compose up -f file1.yml file2.override.yml中进行推断,这意味着我在 docker-compose 文件中指定了 container_name,换句话说,如果我有多个容器,我会使用另一个覆盖文件。我本来希望动态填充这些内容。也许我错过了使用预定义名称构建图像的概念,如果您覆盖 docker-compose 文件,它们仍将使用 old image 而不是 create a new image ;这就是你想告诉我的吗? -
"我一运行
docker-compose up -d,它就会使用旧图像并且不会重新创建新图像?"不知道你是不是这个意思?如果是这样的话,docker-compose 的用处就不是那么大了。
标签: docker docker-compose dockerfile