使用 docker-compose 的堆栈名称

Tho*_*mas 27 docker-compose

有没有办法在使用 docker-compose 时设置堆栈名称?

目前它采用文件夹名称(这是一个可怕的区域),这会导致一些混乱。

例如,我们有几个项目有一个包含数据库堆栈的数据库文件夹。在单个主机上运行这些时,我们现在有几个数据库堆栈。

Maf*_*for 53

有几种方法可以做到:

1.调用时使用--project-name(或-p)选项docker-compose

docker-compose -p "my-app" up

注意:-p "my-app"必须在 之前up

2. COMPOSE_PROJECT_NAME 环境变量:

export COMPOSE_PROJECT_NAME=my-app
docker-compose up
Run Code Online (Sandbox Code Playgroud)

3. .env 文件中的 COMPOSE_PROJECT_NAME

在项目根目录中创建一个名为.env的文件,并在那里设置 COMPOSE_PROJECT_NAME 环境变量:

COMPOSE_PROJECT_NAME=some_app
Run Code Online (Sandbox Code Playgroud)

进而:

docker-compose up
Run Code Online (Sandbox Code Playgroud)

.ENV文件从文件夹中读出其中泊坞-撰写命令被执行,而不是从搬运工-compose.yml文件的文件夹。

假设以下项目结构:

root
 - database
   - docker-compose.yml
   - .env
 - app
   - docker-compose.yml
   - .env
 - ...
Run Code Online (Sandbox Code Playgroud)

下面的命令在根文件夹中执行,不会产生预期的效果:

export COMPOSE_PROJECT_NAME=my-app
docker-compose up
Run Code Online (Sandbox Code Playgroud)

docker-compose 命令需要在 root/database 文件夹中执行:

COMPOSE_PROJECT_NAME=some_app
Run Code Online (Sandbox Code Playgroud)

如果您使用选项 2 或 3,项目名称将应用于所有 docker-compose 命令,就好像它是使用-p选项指定的一样。

  • 这太令人沮丧了,你无法在 docker-compose.yml 中设置它 (26认同)
  • @disfated:现在可以通过 docker-compose 文件中的“name: my-project”顶级元素实现这一点。请参阅下面的答案(/sf/answers/5172166331/) (7认同)

小智 17

看起来可以使用namedocker-compose 文件中的顶级元素设置项目名称,如下所述:https ://docs.docker.com/compose/compose-file/04-version-and-name/#name -顶级元素

\n
\n

顶级name属性由规范定义为要在用户未\xe2\x80\x99t 显式设置时使用的项目名称。nameCompose 实现必须为用户提供一种覆盖此名称的方法,并且应该定义一种机制来计算默认项目名称,以便在未设置顶级元素时使用。

\n
\n

这似乎在其他地方没有得到很好的记录,而且我没有在规范变更日志中看到对它的引用,所以我不确定这是否一直是规范的一部分,或者是否只是组成直到最近才支持它。

\n

项目名称的优先级记录如下:

\n\n
\n

例子

\n

我当前的目录(pwd):

\n
/Users/brahmlower/development/compose-test\n
Run Code Online (Sandbox Code Playgroud)\n

我的撰写文件 ( cat docker-compose.yml):

\n
/Users/brahmlower/development/compose-test\n
Run Code Online (Sandbox Code Playgroud)\n

如果没有该name属性,我们希望看到堆栈以前缀开头,compose-test因为这是目录的名称。但是,当我打开堆栈时,我们看到my-project按预期撰写堆栈名称。

\n

堆栈输出(docker compose up -d):

\n
[+] Running 2/2\n \xe2\xa0\xbf Network my-project_default          Created\n \xe2\xa0\xbf Container my-project-hello-world-1  Started\n
Run Code Online (Sandbox Code Playgroud)\n
\n

版本

\n

如果有帮助的话,我的 docker 版本是:

\n

撰写 ( docker compose version):

\n
Docker Compose version v2.10.2\n
Run Code Online (Sandbox Code Playgroud)\n

泊坞窗(docker version):

\n
Client:\n Cloud integration: v1.0.29\n Version:           20.10.17\n API version:       1.41\n Go version:        go1.17.11\n Git commit:        100c701\n Built:             Mon Jun  6 23:04:45 2022\n OS/Arch:           darwin/arm64\n Context:           default\n Experimental:      true\n\nServer: Docker Desktop 4.12.0 (85629)\n Engine:\n  Version:          20.10.17\n  API version:      1.41 (minimum version 1.12)\n  Go version:       go1.17.11\n  Git commit:       a89b842\n  Built:            Mon Jun  6 23:01:01 2022\n  OS/Arch:          linux/arm64\n  Experimental:     false\n containerd:\n  Version:          1.6.8\n  GitCommit:        9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6\n runc:\n  Version:          1.1.4\n  GitCommit:        v1.1.4-0-g5fd4c4d\n docker-init:\n  Version:          0.19.0\n  GitCommit:        de40ad0\n
Run Code Online (Sandbox Code Playgroud)\n

  • @DavidGomes 我发现这是一个由于版本原因的错误。起初,我使用 `version: "3.3"` 将其更改为 `version:"3.8"` (您可以将其设置为 3.4 以上),突出显示的错误消失了。 (3认同)