如何set/get项目名称在docker-compose.yml
How to set/get the project name in docker-compose.yml
我正在尝试设置一个 docker-compose 项目名称,或者能够在我的配置文件中引用它。这些有可能吗?
我问的原因是我在关注 this tutorial 所以我得到了一个 docker-container.yml
文件,上面写着
web:
build: .
command: bundle exec rails s -p 3000 -b 0.0.0.0
ports:
- "3000:3000"
links:
- db
volumes:
- ".:/myapp"
volumes_from:
- bundle
db:
image: mongo
ports:
- "27017"
bundle:
image: myapp_web # <--- this is actually {$project_name}_web being hard-coded
command: echo Hello
volumes:
- /bundle
由于 image: myapp_web
配置,这仅在项目名称本身为 myapp
时有效。如果我正在处理名为 myapp
的目录或者如果我使用 docker-compose -p myapp
.
,这将是正确的
但是一旦有人更改目录名称,这就会崩溃。我想告诉 docker-compose 使用自定义 COMPOSE_PROJECT_NAME
变量而不必传递 -p fancyname
选项。
我能想到的另一种方法是在 yml 文件中传递某种 image: {$COMPOSE_PROJECT_NAME
}_web,但我真的不确定这是否可以实现。
有什么想法吗?
Github 上有一个 relevant issue 用于 Docker 撰写,您可能想看看。
这只是基于我最初评论的回答。
当基于同一个镜像构建多个服务时,重新构建它通常是安全的。在这种情况下,bundle
只能构建 .
。由于您只是再次构建 web
,它将被缓存(从而快速构建)并且也具有相同的图像 ID。
我正在尝试设置一个 docker-compose 项目名称,或者能够在我的配置文件中引用它。这些有可能吗?
我问的原因是我在关注 this tutorial 所以我得到了一个 docker-container.yml
文件,上面写着
web:
build: .
command: bundle exec rails s -p 3000 -b 0.0.0.0
ports:
- "3000:3000"
links:
- db
volumes:
- ".:/myapp"
volumes_from:
- bundle
db:
image: mongo
ports:
- "27017"
bundle:
image: myapp_web # <--- this is actually {$project_name}_web being hard-coded
command: echo Hello
volumes:
- /bundle
由于 image: myapp_web
配置,这仅在项目名称本身为 myapp
时有效。如果我正在处理名为 myapp
的目录或者如果我使用 docker-compose -p myapp
.
但是一旦有人更改目录名称,这就会崩溃。我想告诉 docker-compose 使用自定义 COMPOSE_PROJECT_NAME
变量而不必传递 -p fancyname
选项。
我能想到的另一种方法是在 yml 文件中传递某种 image: {$COMPOSE_PROJECT_NAME
}_web,但我真的不确定这是否可以实现。
有什么想法吗?
Github 上有一个 relevant issue 用于 Docker 撰写,您可能想看看。
这只是基于我最初评论的回答。
当基于同一个镜像构建多个服务时,重新构建它通常是安全的。在这种情况下,bundle
只能构建 .
。由于您只是再次构建 web
,它将被缓存(从而快速构建)并且也具有相同的图像 ID。