Docker 使用组合文件进行堆栈部署导致类型 "bind" 的挂载配置无效:绑定源路径不存在:

Docker stack deploy with compose-file results in invalid mount config for type "bind": bind source path does not exist:

我正在尝试部署我的容器并收到此错误(来自 docker stack ps testapp --no-trunc):invalid mount config for type "bind": bind source path does not exist: /home/john/valet/testapp。 我正在使用 docker-compose。我知道在部署之前它使我的相对卷映射成为绝对卷映射并且在远程主机上 /home/john/valet/testapp 不存在。

  volumes:
        - ./:/var/www/:cached

但我不太确定如何解决这个问题。

P.S。在 docker-compose build && docker-compose up -d 和 docker 集线器上,本地一切都很好,我的自动构建也成功构建。

已编辑:以防万一添加源代码的回购:https://github.com/neorganic/dockertest

尝试将其更改为:

- $PWD:/var/www/:cached

我想你需要这里的完整路径

您需要做的就是为您的卷指定正确的路径。您可以创建一个单独的文件并将其命名为 docker-compose-production.yml.

volumes:
  - /srv/data/www/:/var/www/

此外,请记住,对于生产系统,您要使用 swarm 模式 (docker swarm init) 并使用 docker swarm deploy 应用 stach 更改。

:cached 选项仅适用于 OSX 系统并且您很可能在生产中使用基于 linux 的 OS。

所以实际的问题是我不明白我正在部署容器的主机上必须存在该卷。出于某种原因,我认为它是来自我的本地设备的 copied/synchronized。

我还得出结论,当 kubernetes 解决了这个问题时,将源代码托管在 docker-swarm 中的复杂性是我不想拥有的,所以我切换到 kubernetes(就此而言 gc)。