Ale*_*ley 14 docker docker-compose
我将以下行放在 docker-compose.yml 的顶部,以获取由该特定 docker-compose 旋转的容器的预设名称:
name: my_project_name
Run Code Online (Sandbox Code Playgroud)
例如,目标是将我的数据库服务容器命名为“my_project_name_database”。
但是,在尝试使用 docker-compose up 启动它后,出现以下错误:
错误:Compose 文件“./docker-compose.yml”无效,因为:“名称”与任何正则表达式都不匹配:“^x-”您可能会看到此错误,因为您使用了错误的 Compose 文件版本。指定受支持的版本(例如“2.2”或“3.3”)并将您的服务定义放置在该
services密钥下,或者省略该version密钥并将您的服务定义放置在文件的根目录下以使用版本 1。有关 Compose 文件的更多信息格式版本,请参阅https://docs.docker.com/compose/compose-file/
无论我指定哪个版本的 docker-compose,这种情况都会持续发生。我在这里做错了什么?这是在 docker-compose.yml 级别设置项目名称的正确方法吗?
Dav*_*aze 31
我建议不要设置顶级密钥,但如果需要,name:请设置环境变量。COMPOSE_PROJECT_NAME
export COMPOSE_PROJECT_NAME=my_project_name
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
项目名称也默认为当前目录的基本名称,因此重命名它可能是一个选项。
cd ..
mv project my_project_name
cd my_project_name
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
Docker 对 Compose 文件格式做了一些令人困惑的事情。他们引入了一个Compose 规范,该规范与现有工具存在一些不兼容性,然后将 Compose 工具的所有合理当前版本都很好支持的现有版本标记为“旧版” 。 顶级密钥在“规范”版本中是新的,但在“旧”版本中不存在。name:
Compose 文件版本2和3都不支持顶级name:密钥。如果您运行独立docker-compose工具,则没有在 Compose 文件中设置项目名称的选项。但$COMPOSE_PROJECT_NAME适用于所有合理的最新版本的 Compose。
如果你运行docker-compose version并打印
$ docker-compose version
docker-compose version 1.29.2, build 5becea4c
docker-py version: 5.0.0
CPython version: 3.9.0
OpenSSL version: OpenSSL 1.1.1h 22 Sep 2020
Run Code Online (Sandbox Code Playgroud)
那么您就不能使用 Compose 规范,但可以使用受良好支持的“遗留”版本。但是,如果你运行docker compose version(注意,三个单词,没有连字符)并且它打印
$ docker compose version
Docker Compose version v2.6.0
Run Code Online (Sandbox Code Playgroud)
那么您可以使用“旧”版本或“规范”版本。
也就是说,如果您使用“规范”扩展,那么您必须使用安装了 Compose 扩展的最新版本的 Docker,但如果您使用version: '2.4'或 那么version: '3.8'它将适用于任何或多或少当前版本的 Docker撰写。
我看到的设置的常见用例$COMPOSE_PROJECT_NAME是同时运行同一 Compose 文件的多个副本。为此,您需要设置环境变量(并且还要使用已发布的环境变量ports:,并避免手动设置container_name:卷或网络名称);如果它是文件中的常量,那么您在使用应用程序的一个实例或另一个实例时必须对其进行编辑。
| 归档时间: |
|
| 查看次数: |
20244 次 |
| 最近记录: |