# 从独立容器迁移到独立的 Web 和数据容器

**URL:** https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413
**Category:** Sysadmins
**Tags:** docker, how-to, advanced-setup, two-container
**Created:** [2015 年5 月 29 日 14:12 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413 "2015-05-29T14:12:22Z")
**Posts on this page:** 20
**Page:** 7

<div class="post-metadata">

### Author: ![philh](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/philh/32/532740_2.png) [@philh](https://meta.discourse.org/u/philh)
#### Post date: [2026 年2 月 7 日 17:09 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/130 "2026-02-07T17:09:58Z")

</div>

同意，这些说明确实需要调整。数据部分不再起作用似乎很奇怪。  
每年都有一次较长的停机时间也不是什么大问题……

> [@merefield](#):
>
> 我猜你停止数据容器后就没有遇到任何问题了？

没有，除了我错误地编辑了 `web_only.yml` 并使用了现有的 `app.yml` 配置所造成的问题外，没有其他问题。🫪

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [2026 年2 月 16 日 16:56 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/131 "2026-02-16T16:56:47Z")

</div>

> [@merefield](#):
>
> `docker_manager` 插件在这个设置中没有用吗？——它总是在告诉我重建应用程序！

很高兴地报告，对于这个双容器设置，现在它似乎可以正常工作了！  
唯一剩下的问题是用于告知您如何从命令行（“app”）重建的网站文本，但这只是一个小问题。  
抄送：@pfaffman

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2026 年2 月 16 日 19:34 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/132 "2026-02-16T19:34:45Z")

</div>

> [@merefield](#):
>
> 唯一剩下的问题是用于告诉您如何从命令行界面（“app”）重建的网站文本，但这只是件很小的事情。

是的，那是硬编码的。如果您不记得了，则需要自定义文本。🙂

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2026 年2 月 17 日 18:59 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/133 "2026-02-17T18:59:29Z")

</div>

5 个帖子被拆分到新主题：[Build fails due to ruby version mismatch](https://meta.discourse.org/t/build-fails-due-to-ruby-version-mismatch/396317)

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2026 年2 月 17 日 21:44 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/134 "2026-02-17T21:44:53Z")

</div>

> [@philh](#):
>
> ./launcher bootstrap data && ./launcher destroy data && ./launcher start data

那永远行不通。抱歉我之前错过了。我已经更新了 OP。如果你需要重建数据，那么你需要

./launcher stop web\_only; ./launcher rebuild data && ./launcher rebuild web\_only

> [@philh](#):
>
> 我遗漏了什么吗？

没有。这正是预期的。你不能在另一个 postgres 访问文件时重建 postgres。如果创建了一个新的数据容器，你需要销毁并启动一个新的 web\_only 容器，因为 docker 某种程度上链接到确切的容器而不是对名为 data 的容器的引用。

---

<div class="post-metadata">

### Author: ![philh](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/philh/32/532740_2.png) [@philh](https://meta.discourse.org/u/philh)
#### Post date: [2026 年2 月 17 日 22:29 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/135 "2026-02-17T22:29:08Z")

</div>

感谢 OP 的编辑 👍 以及在 [Build fails due to ruby version mismatch](https://meta.discourse.org/t/build-fails-due-to-ruby-version-mismatch/396317) 中的帮助

---

<div class="post-metadata">

### Author: ![Mid](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mid/32/544154_2.png) [@Mid](https://meta.discourse.org/u/Mid)
#### Post date: [2026 年2 月 23 日 13:15 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/136 "2026-02-23T13:15:06Z")

</div>

我是疯了吗，还是 `discourse-install` 脚本不再包含 `–two-container` 参数了？我直接从推荐位置（[https://raw.githubusercontent.com/discourse/discourse\_docker/main/install-discourse）在一个全新的](https://raw.githubusercontent.com/discourse/discourse_docker/main/install-discourse%EF%BC%89%E5%9C%A8%E4%B8%80%E4%B8%AA%E5%85%A8%E6%96%B0%E7%9A%84) Ubuntu 24.04 VPS（在 Hetzner 上）上运行它，它只安装了一个常规的单容器设置，带有一个 app.yml。我以为也许我需要运行它生成的 `discourse-setup`，但它又做了同样的事情。

---

<div class="post-metadata">

### Author: ![philh](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/philh/32/532740_2.png) [@philh](https://meta.discourse.org/u/philh)
#### Post date: [2026 年2 月 23 日 17:32 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/137 "2026-02-23T17:32:00Z")

</div>

使用手动安装方法和 `./discourse-setup --two-container` 在我上次使用时对我来说运行良好。

或者使用巧妙的安装脚本进行安装，然后如原帖（OP）中所述转换为两个容器。

@Falco 和 @pmusaraj 你们认为是否应该将旧的 INSTALL-cloud.md 的部分内容保留在某处，并在当前的 INSTALL-cloud.md 中引用？

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2026 年2 月 23 日 18:16 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/138 "2026-02-23T18:16:02Z")

</div>

> [@Mid](#):
>
> 我是疯了吗，还是 discourse-install 脚本不再包含 `--two-container` 参数了？

> [@philh](#):
>
> 使用手动安装方法并运行 `./discourse-setup --two-container`，我上次使用时它运行正常。

它确实被移除了，我已经从上面的 wiki 中删除了相关引用。

---

<div class="post-metadata">

### Author: ![philh](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/philh/32/532740_2.png) [@philh](https://meta.discourse.org/u/philh)
#### Post date: [2026 年2 月 23 日 18:30 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/139 "2026-02-23T18:30:10Z")

</div>

感谢您的信息。它为什么被移除了？它曾是一个非常方便的方法。

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2026 年2 月 23 日 18:39 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/140 "2026-02-23T18:39:35Z")

</div>

由不熟悉 Docker 的人进行的两次容器安装产生了过多的支持负担。这是一个高级安装设置，应该留给那些了解其操作的人。

---

<div class="post-metadata">

### Author: ![philh](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/philh/32/532740_2.png) [@philh](https://meta.discourse.org/u/philh)
#### Post date: [2026 年2 月 23 日 18:50 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/141 "2026-02-23T18:50:37Z")

</div>

所以你们让使用该功能的人感到困难。你们事先有征求过任何人的意见吗？考虑到即使有人 **错误地** 使用 OP 方法也会给自己带来一些问题，你们本可以保留它。

> [@Falco](#):
>
> 太多的支持负担

谁的负担？在这个帖子里？支持是由志愿者/用户提供的，而不是团队提供的。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2026 年2 月 23 日 18:57 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/142 "2026-02-23T18:57:50Z")

</div>

那么您会把 `web_only` 和 `data` 保留在 `samples` 中，而想要使用两个容器的人将不得不手动复制和配置它们？之前唯一需要的额外支持是帮助那些从不关心更新数据容器的人。

现在我们需要告诉一堆人如何使用 `cp` 和 `nano`。可以说，如果你不知道 `cp` 和 `nano`，你就不应该运行双容器设置。Jeff 曾争辩说，如果你不知道 `cp` 和 `nano`，你就不应该安装 Discourse，但当我编写 `discourse-setup` 时，我成功地改变了他的想法。

在接下来的时间里，我将重写我的 [dashboard.literatecomputing.com](http://dashboard.literatecomputing.com)，使其停止进行标准安装（因为它不能再将答案通过管道传输到 `discourse-setup` 中），并将在那里继续提供双容器安装作为选项。

---

<div class="post-metadata">

### Author: ![philh](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/philh/32/532740_2.png) [@philh](https://meta.discourse.org/u/philh)
#### Post date: [2026 年2 月 23 日 19:01 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/143 "2026-02-23T19:01:22Z")

</div>

> [@pfaffman](#):
>
> 所以你会把 `web_only` 和 `data` 保留在 `samples` 中，而想要使用两个容器的人将不得不手动复制和配置它们？之前唯一需要的额外支持是帮助那些从不关心更新数据容器的人。

@Falco 请考虑 @pfaffman 的意见并重新考虑

> [@Falco](#):
>
> 它确实被删除了，我已经从上面的 wiki 中删除了引用。

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [2026 年2 月 23 日 19:06 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/144 "2026-02-23T19:06:11Z")

</div>

我不太喜欢。这感觉像是离完全放弃对双容器的支持又近了一步，那将是一件非常遗憾的事情。

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2026 年2 月 23 日 20:21 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/145 "2026-02-23T20:21:55Z")

</div>

> [@pfaffman](#):
>
> 在接下来的时间里，我将重写我的 [dashboard.literatecomputing.com](http://dashboard.literatecomputing.com) 以停止进行标准安装（因为它不能再将答案通过管道传输到 discourse-setup），并将在那里继续提供一个 2 容器安装的选项。

这就是开源的伟大之处；人们可以选择自己的冒险！

> [@philh](#):
>
> 对谁来说是负担？ 在这个主题中？ 支持是由志愿者/用户提供的，而不是团队提供的。

⬇

> [@pfaffman](#):
>
> 一直在帮助那些从不关心更新数据容器的人。

数十个运行着被完全遗忘的过时容器的人，每次 PostgreSQL 需要进行重大更新时都会造成很多困惑，这反过来又减少了我们进行 PostgreSQL 更新的频率，从而使整体产品变差。

> [@pfaffman](#):
>
> 可以说，如果你不知道 `cp` 和 `nano`，那么你不应该运行双容器设置。

我同意 😛

> [@merefield](#):
>
> 我不太喜欢。这感觉像是离完全放弃对双容器的支持又近了一步，那将是一件非常遗憾的事情。

实际上不可能放弃对双（或 N）容器安装的支持；Discourse 原生连接到外部数据库，如 [Configure Discourse to use a separate PostgreSQL server](https://meta.discourse.org/t/configure-discourse-to-use-a-separate-postgresql-server/46375) 中所述。

没有删除任何灵活性，但类似于 [https://blog.codinghorror.com/the-power-of-defaults/，我们创建的每个选项都成为需要考虑的事情。](https://blog.codinghorror.com/the-power-of-defaults/%EF%BC%8C%E6%88%91%E4%BB%AC%E5%88%9B%E5%BB%BA%E7%9A%84%E6%AF%8F%E4%B8%AA%E9%80%89%E9%A1%B9%E9%83%BD%E6%88%90%E4%B8%BA%E9%9C%80%E8%A6%81%E8%80%83%E8%99%91%E7%9A%84%E4%BA%8B%E6%83%85%E3%80%82)

删除数千行脚本并简化安装程序以覆盖更常见的使用场景是一个有意识的选择，但 Discourse 仍然支持所有相同的用例，并且如果人们选择，他们可以自由地选择自己的道路。

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [2026 年2 月 23 日 20:36 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/146 "2026-02-23T20:36:51Z")

</div>

感谢您保证这种生产模式在没有大量定制的情况下仍能继续运作 🙌

---

<div class="post-metadata">

### Author: ![philh](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/philh/32/532740_2.png) [@philh](https://meta.discourse.org/u/philh)
#### Post date: [2026 年2 月 23 日 21:49 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/147 "2026-02-23T21:49:13Z")

</div>

> [@Falco](#):
>
> 没有移除灵活性，但类似于[默认设置的力量](https://blog.codinghorror.com/the-power-of-defaults/)，我们创建的工具中的每个选项都需要被考虑。

为了强制所有人都遵循一条路径，牺牲了使用被移除方法的用户的便利性。这是一个人做的决定，还是有其他人参与？

来自 codinghorror  
`“默认设置可以说是您作为软件开发人员所做的最重要设计决策。选择好的默认设置，用户会赞扬您的软件以及它有多么易于使用。选择糟糕的默认设置，您将不得不面对用户的配置焦虑，可能还有一堆技术支持电话。”`

依我看，选择的默认设置很糟糕，而且这个选择/更改是在没有与抱怨此更改的用户群体进行任何参与、讨论或考虑的情况下做出的。

> [@Falco](#):
>
> 删除数千行脚本并简化安装程序以涵盖更常见的使用场景是一个有意识的选择，但 Discourse 仍然支持所有相同的用例，而且人们可以自由地选择自己的道路，如果他们愿意的话。

再次询问，这是谁的有意识的选择？

> [@Falco](#):
>
> …而且人们可以自由地选择自己的道路，如果他们愿意的话

该用户认为这条评论是傲慢和不尊重的。这感觉就像一个人被看不起和无视时会有的感觉。我怀疑意图是引起这种反应，但现在我们就在这里。

总的来说，这个事件与我几周前在与 @nat 的私人消息中抱怨的内容一致。CDCK/Meta 有两个不平等的客户群体：付费托管的客户和自托管的用户。这个事件中的处理方式是这个两级制度的最新、也许是最过分的例子。

尽管说了这么多……

我赞扬新的安装程序。它在处理安装问题和由此产生的自第一天以来的支持需求方面做得很好。

至于更改，CDCK 有权按其认为合适的方式构建/更改。对此没有异议。我希望他们能以一种不会疏远人们的方式进行操作。

最后，重读 codinghorror 的帖子让我想起了 Jeff 参与帖子时的情况。他的帖子经常带有轻蔑、不尊重和轻微傲慢的味道。幸运的是，我从未成为那种态度的直接目标，但其中一些帖子读起来很痛苦。我最近与工作人员就如何处理帖子进行的互动以及这个事件感觉非常相似。也许只是我自己的感觉。

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2026 年2 月 24 日 00:32 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/148 "2026-02-24T00:32:38Z")

</div>

> [@philh](#):
>
> CDCK/Meta 有两类不平等的客户，一类是付费托管的客户，另一类是自托管的客户。

这听起来有点苛刻。团队每天都在这个论坛上帮助自托管用户，即使是那些属于 #unsupported-install 的用户 🙂

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [2026 年9 月 21 日 16:23 UTC](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413/149 "2026-09-21T16:23:04Z")

</div>

> [@merefield](#):
>
> 在这个设置中，`docker_manager` 插件是不是没什么用？——它总是提示我重新构建应用！

我终于解决这个问题了！😅 @pfaffman

> bootstrap 不会更新 launcher，而 launcher 可能会锁定旧的基础镜像。`git pull` 会更新这个锁定，以便下一次 bootstrap 使用较新的镜像。（rebuild 通常会自动拉取。）

所以你看——这就是为什么有时需要执行 `git pull`——bootstrap 过程并不会更新 launcher！

如果你只是执行 bootstrap 和 recreate，你将永远无法跳出这个循环。

我在想，这是否应该与 rebuild 保持一致？

[Previous page](https://meta.discourse.org/t/move-from-standalone-container-to-separate-web-and-data-containers/29413.md?page=6)
