带有compose-file的Docker堆栈部署导致类型为“ bind”的挂载配置无效:绑定源路径不存在:

时间:2019-09-30 10:13:51

标签: docker docker-compose dockerfile docker-swarm docker-stack

我正在尝试部署容器,并从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 hub上,我的自动构建也可以成功构建。

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

3 个答案:

答案 0 :(得分:1)

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

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

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

:cached选项仅适用于OSX系统,最有可能在生产中使用基于Linux的OS。

答案 1 :(得分:0)

尝试将其更改为:

- $PWD:/var/www/:cached

我认为您需要完整的路径

答案 2 :(得分:0)

所以实际的问题是我不了解该卷必须在我正在部署容器的主机上存在。出于某种原因,我认为它是从本地设备复制/同步的。

我还得出结论,在docker-swarm解决此问题后,我宁愿没有这种将源代码托管在kubernetes中的复杂性,因此我切换到{{1 }}(和kubernetes)。