2015-06-30 88 views
1

使用postgres圖片時,我有一些奇怪的行爲。docker stop && docker rm並沒有真正擺脫我的容器

我已經創建了一個腳本,掛載到/docker-entrypoint-initdb.d並使用單用戶模式初始化數據庫。

然而,當我更新腳本,運行

docker stop postgres_db 
docker rm postgres_db 

,比啓動一個新的容器,該數據庫是舊的。它不會改變。

我使用的是無業遊民box-cutter/ubuntu1404-docker當我運行

vagrant destroy -f 
vagrant up 

,比重新創建新的泊塢窗容器中,更改應用。

爲什麼它不工作,當我剛剛刪除舊的容器,並開始一個新的?碼頭工人在哪裏保持它的緩存,我可以清除,真正得到一個新的形象?

更新:

我使用的確切泊塢窗文件是一個小擴展到原來的一個。它只是安裝orafce插件link,內容:

FROM postgres:9.4 

RUN apt-get update && \ 
    apt-get install -y postgresql-9.4-orafce && \ 
    rm -rf /var/lib/apt/lists/* 

我用來啓動一個新的容器的命令是:

docker run --name="postgres_db" \ 
      --restart="always" \ 
      -e POSTGRES_PASSWORD=PostgresPassword \ 
      -p 5432:5432 \ 
      -v /data:/var/lib/postgresql/data \ 
      -v /vagrant/container_data/init_scripts:/docker-entrypoint-initdb.d \ 
      -v /vagrant/container_data/tmp:/tmp \ 
      -d grmanit/postgres 

init_scripts文件夾中包含一個腳本,創建一個新的數據庫和新用戶。

澄清:

當我改劇本在我init_scripts文件夾,比如修改數據庫的名稱,並且比停止+刪除舊的容器,並開始一個新的,它不具有任何影響。

當我改變的postgres,其被設置爲在docker run命令的環境變量的密碼(在這個例子中它是PostgresPassword),並再次停止+刪除舊的容器和比開始一個新的與新的環境變量,它再次沒有任何影響。我仍然需要使用舊的密碼連接到數據庫,新的不起作用。

但是當我銷燬虛擬機並重新啓動時,我擁有之前定義的配置。然而,再次改變它們需要我銷燬並重新啓動虛擬機,這比僅僅銷燬碼頭集裝箱並啓動新虛擬機花費的時間要長得多。

+0

請包括dockerfile(如果有)以及用於啓動容器的確切命令 –

+1

docker vs VM的一個怪癖是每個'docker run'都會將原始圖像的新副本創建爲新的容器,因此,似乎變化不會持續。如果這是個問題,學習使用'-v'或者'docker commit'爲永久文件裝入卷可能會有所幫助(但不要習以爲常)。 – Paul

回答

3

您得到一個新的容器,但是-v /data:/var/lib/postgresql/data將主機的/data目錄掛載到容器中,對容器之間的數據庫進行更改。如果你省略了,數據庫將被隔離在容器中,並且一旦刪除容器就會消失。

查看Managing data in containers (Docker documentation)瞭解詳情。

+0

aaaa我忘了刪除文件夾 - thx – peter

相關問題