你的 Container 在跑的時候, 沒有給 /tmp/work 外部寫入的權限...
要看你當初跑 Conainer 的指令才知道問題在何處....如果你不知道的話, 請用:
docker inspect $PG_CONTAINER
看一下原本給了甚麼參數?
或者請當初建這個 Container 的人, 給妳正確的 docker run 參數...
這是$PG_CONTAINER的參數,但還是不會看。
https://hackmd.io/@Y00YB1ZGRJaUT9hlzSidIw/r13e6dJ1K
暫時開啟/關閉SELinux,就可以用了。
雖然你自己解掉了, 但這邊還是說明一下...
關掉 SELinux 並不是好的解法, 他只是讓你暫時閃過去, 但在關掉的期間, 整個 OS 都暴露在沒有 SELinux 保護的較高風險之中, 變成要由你扛起系統被駭的責任...
正確的做法, 應該是要遵循 SELinux 的規則, 而不是關掉它, 但將其修改為符合你 Container 環境所需. 假設你是跑 CentOS/RHEL 7 以上的版本, 照理說, SELinux 裡面已經預含可以允許 container 做 bind mount 的規則, 只需要將她打開就可以...
比對您上面所貼的 inspect 內容可以發現, 主要被 SELinux 擋到的 bind mound 是這條:
{
“Type”: “bind”,
“Source”: “/opt/osm-styles/imposm/work”,
“Destination”: “/tmp/work”,
“Mode”: “”,
“RW”: true,
“Propagation”: “rprivate”
},
在 OS 層級的 /opt/osm-styles/imposm/work 因為受到 SELinux 保護, 會拒絕未經許可的寫入. 其實, 你只需要在啟動 Container 的時候, 在 -v 後面加上 :Z 參數告知有 SELinux, 他就會自動解決這個問題. 例如:
-v /opt/osm-styles/imposm/work:/tmp/work:Z
這樣就不需要將整個 SELinux 關閉..
相關討論:
https://gist.github.com/jamesluberda/537af7f2144dc4440ab5f45f8ef9ab82
我現在在用linux 使用docker,可否請大神推薦入門的網路資料,給我當書單。
不然我現在使用這個工具似乎東摸一塊,西摸一塊。
覺得自已空空的。
原廠的文件寫得還不錯, 全部看完應該有概念:
https://docs.docker.com/
然後多看國外論壇裡面的討論, 如: StackOverflow...