2016-08-30 93 views
0

以前,要訪問一個文件在運行的dokku比如我會跑: docker ps得到容器ID後跟 ls /var/lib/docker/aufs/diff/<container-id>/app/... 注:我只是用「LS」作爲一個例子命令。我最終想引用一個特定的文件。Dokku/Docker,如何在運行容器的文件系統中訪問文件?

由於容器ID不再可以通過此路徑訪問,因此必須進行更改。該文件夾中有大量的目錄,但沒有與任何正在運行的容器相匹配。

在這種情況下,似乎在整個容器中安裝一個卷將是矯枉過正的。我知道我可以使用dokku run project-name ls以及docker exec <container-id> ls來訪問文件系統,但這兩者都不能滿足我的使用情況。

爲了更完整地解釋一下,在我的dokku項目中,我有一些.sql文件用於引導我的postgres數據庫。這些文件通過git push與項目的其餘部分一起推送。

我希望使用Postgres的dokku插件運行以下命令:

dokku postgres:connect db-name < file-name.sql

這是我以前一直用做:

dokku postgres:connect db-name < /var/lib/docker/aufs/diff/<container-id>/app/file-name.sql但不再起作用。

對此有何看法?我是否全部錯了?

非常感謝您的任何想法。

回答

1

絕不要依賴/var/lib/docker文件系統路徑,因爲這裏存儲的大部分數據都依賴於storage driver currently in use,所以它可能會有所變化。

cat從現有的容器

docker exec <container> cat file.sql | dokku postgres:connect db-name 

cat該文件的文件從圖像

docker run --rm <image> cat file.sql | dokku postgres:connect db-name 

複製文件從現有的容器

docker cp <container>:file.sql file.sql 
dokku postgres:connect db-name < file.sql 
+0

太棒了。非常感謝。這很有道理。我的unix經驗顯然是有限的。你的解釋幫助我更好地理解了'dokku postgres:connect db-name ThePuzzleMaster

+0

沒問題。Unix命令行是[所有關於管道](http://www.linfo.org/pipe.html)和[重定向](http://www.linfo.org/redirection.html)。 ''只是將文件重定向到命令的標準輸入。 – Matt

1

這裏例如:

dokku apps

=====>我的應用

DummyApp

dokku enter DummyApp

輸入的bash到DummyApp容器。

相關問題