2017-01-02 86 views
0

我已經下載了一個postgresql泊塢窗圖像,並在此刻編輯一些配置文件。我遇到的問題是,無論何時編輯配置文件並提交docker鏡像(將其保存爲新鏡像),它都不會保存任何內容。該圖像仍然與我下載的圖像相同。保存碼頭狀態(例如編輯postgresql.conf文件)

圖片我使用: https://hub.docker.com/_/postgres/

我相信這是最新的泊塢窗文件。 https://github.com/docker-library/postgres/blob/a00e979002aaa80840d58a5f8cc541342e06788f/9.6/Dockerfile

這就是我所做的:創建

1. Run the postgresql docker container 
2. Enter the terminal of the container. docker exec -i -t {id of container} /bin/bash 
3. Edit some config files. 
4. Exit the container. 
5. Commit the changes by using docker commit {containerid} {new name} 
6. Stop the old container and start the new one. 

新的容器。如果我用新圖像啓動新容器並檢查我編輯的配置文件,我的更改不存在。未做任何更改。

我在做什麼錯在這裏?

+0

您能否提供使用過的mysql映像?所以我們檢查dockerfile。我相信Docker文件是其原因,它調用了一些可以覆蓋配置更改的東西,並可能提供了一種更好的方式來配置實例,使其實現更改。 –

+0

Hi @ReneM。我編輯了我的問題。請看一下。感謝您的幫助。 –

+0

非常感謝,因爲您發佈了其他用來回答您的問題的請求信息。正如我的想法,您的docker文件可以防止您保留更改。他是對的:@ mark-oconnor –

回答

2

泊塢窗文件包含一個容積聲明

https://github.com/docker-library/postgres/blob/a00e979002aaa80840d58a5f8cc541342e06788f/9.6/Dockerfile#L52

​​

此路徑下的所有文件的修改將不會被保存在一個碼頭工人形象提交。這些數據文件在定義您的容器狀態時被故意排除。另一方面,圖像用於創建新容器,因此VOLUME是保持狀態分離的機制。

這似乎是你試圖使用Docker鏡像作爲數據庫備份和恢復機制。這是不明智的,因爲與通常暴露給卷的本機文件系統相比,docker文件系統的性能較差。

0

正如Mark正確指出的那樣,您的數據由於體積定義而被遺留下來,並且不應爲一般生產使用而更改。

ENV PGDATA /var/lib/postgresql/my_data 
RUN mkdir -p $PGDATA 

我一直在使用這種技術:

如果你有正當理由,以保持產生的圖像中的數據,可以從卷中加入以下到您dockerfile移動Postgres的數據生成用於測試的db圖像以加速反饋循環。