2017-01-02 88 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图像以加速反馈循环。