如何解决在新部署App DOKKU后丢失上传文件的问题

时间:2019-01-16 14:24:50

标签: docker deployment dokku

当我第一次使用dokku部署我的应用程序时,我使用docker-option托管了uploadsIMG文件夹,并且一切正常,但是当我更新或重新启动应用程序时,我会丢失所有图像等。 谢谢

我尝试了docker-option:

`dokku docker-options:add betrocapi run "-v /home/dokku/dataBetroc:/uploadsIMG"`
`dokku docker-options:add betrocapi deploy "-v /home/dokku/dataBetroc:/uploadsIMG"`

当我跑步时:

`dokku docker-options betrocapi`

它给了我

`Build options:
    --link dokku.mysql.betrocsql:dokku-mysql-betrocsql
Deploy options:
    --link dokku.mysql.betrocsql:dokku-mysql-betrocsql
    --restart=on-failure:10
    -v /home/dokku/dataBetroc:/uploadsIMG
Run options:
    --link dokku.mysql.betrocsql:dokku-mysql-betrocsql
    -v /home/dokku/dataBetroc:/uploadsIMG
`

但是当我在我的i应用程序中更改某些内容并重新运行git push dokku master时,我会丢失所有照片。 新部署的日志为:

`       CHECKS file not found in container: Running simple container check...
-----> Waiting for 10 seconds ...
-----> Default container check successful!
-----> Running post-deploy
-----> VHOST support disabled. Skipping domains setup
-----> Creating http nginx.conf
-----> Running nginx-pre-reload
       Reloading nginx
-----> Setting config vars
       DOKKU_APP_RESTORE:  1
-----> Found previous container(s) (d48be97bb479) named betrocapi.web.1
=====> Renaming container (d48be97bb479) betrocapi.web.1 to betrocapi.web.1.1547646932
=====> Renaming container (402abba16e28) fervent_hoover to betrocapi.web.1
-----> Shutting down old containers in 60 seconds
=====> d48be97bb47914c666fbcff5ede8fdf82093dad6c451e6bad2168b14f23ee41f
`

Ps:我也尝试:dokku storage:mount ....相同的结果。

任何人都可以向我解释为什么?

谢谢

1 个答案:

答案 0 :(得分:0)

Dokku与heroku具有相同的基础。

Heroku文件系统是临时的,因此对该文件系统的任何更改将仅存在于运行应用程序的dokku的最后一个活动容器中。因此,当您推送代码时,dokku会创建一个包含应用程序文件的新容器,然后将其替换为旧容器。关闭或重新启动应用程序时也会发生同样的事情。

使用dokku存储有可能使其工作,只需遵循本指南http://dokku.viewdocs.io/dokku~v0.7.2/advanced-usage/persistent-storage/的某些步骤,但请注意,您将必须使用相对路径ex。应用中的“ / app / storage”,以便进行存储。但是,根据我们在产品上运行dokku应用1年后的经验,您可以通过dokku的工作原理的神秘原因轻松地将文件搞砸。

如果您确实需要存储数据,我建议使用专用文件存储服务,例如AWS S3,它非常便宜。您可以使用一些宝石来存储它们,这些宝石可以轻松地帮助您处理S3中的文件,例如papeclip,蜻蜓,activestorage(如果您使用的是Rails 5.2)。