app.yml中的Docker shm_size 选项

是否可以将 shm_size 参数作为 app.yml 中的一个选项?今天我在尝试执行 vacuum analyze 时遇到了以下错误:

ERROR: 无法调整共享内存段大小

系统试图将共享内存使用量增加到 1 GB,但失败了,因为默认情况下它只有 512 MB。该参数似乎位于启动脚本中,但将其作为 .yml 文件中的一个选项(默认情况下可能注释掉)可能会更友好。

您可以通过 --docker-args 传递自定义的 Docker 参数,以覆盖我们提供的默认设置。

我认为用法大致如下:./launcher start app --docker-args "--shm-size=1024m"

7 个赞

不幸的是,我尝试后并未奏效。我认为可能需要重新构建容器以扩大共享内存空间?我不得不修改启动脚本中硬编码区域的值,然后重新构建容器,更改才会真正生效。

此外,这很可能无法在更新或重新构建后保留——您每次都需要手动进行修改。

1 个赞

你运行了哪些命令?要使 --shm-size 选项生效,你必须重新构建容器。

2 个赞

我最初只是停止容器,然后使用带有该参数的启动器启动命令。接着,我手动编辑了启动器脚本中的 --shm-size 参数,并重新构建了容器。之后,该值就正确调整了。如果你通过命令行覆盖该参数来重新构建容器,那么当你通过 /admin/upgrade 界面执行更新或重新构建时,更改不会丢失吗?这就是我认为最好将其设为 app.yml 中的一个字段的原因——这样在重新构建和代码更新时,该设置就能得以保留。

1 个赞

嗯,我觉得这很有用。@sam,你怎么看?

1 个赞

不过那并不会重建容器,所以是安全的。

我们不是已经有了这个吗,参考:

你的 yaml 中的 docker_args: ....

我不确定。这会覆盖启动器文件本身吗?我看到有三个地方硬编码了这个选项:

那我们得修复这个问题,不过修复方案涉及一个非常复杂的 Bash 脚本。欢迎随时尝试。

我们的 Docker 参数获取函数应当负责处理 shm-size,包括处理用户覆盖并设置默认值。

2 个赞

@Ghan

在此期间(仅用于测试目的,请参见下方的注意事项),你可以在容器构建后通过 Docker 直接修改该设置,步骤如下:

  • 直接编辑 /var/lib/docker/containers/$CONTAINER_ID/hostconfig.json 文件。
  • 例如,修改上述文件中的 ShmSize 值。
  • 停止并重新启动容器。

在我们的 Docker 容器 hostconfig 文件中,它看起来是这样的:

"ShmSize":536870912,

希望这能帮到你(HTH)。

注意事项:有人发帖称,在修改 hostconfig.json 之前必须停止 Docker 服务(否则更改会被覆盖)。不过,我本人尚未对此进行测试。显然,使用 launcher 解决方案会更好 :slight_smile:

有人知道增加 shm_size 的当前解决方案吗?

编辑:似乎它仍然是硬编码的。

相关帖子: