仅将 docker 上的 PostgreSQL 持久存储转换为现代 docker 存储

Transition PostgreSQL persistent storage on docker to modern docker storage only

随着

的出现
docker volume create

对于 storage only containers,我仍然在我的机器上使用旧方法 运行 postgres 用于没有 docker 文件的小型应用程序:

# MAKE MY DATA STORE
STORAGE_DIR=/home/username/mydockerdata/pgdata
docker create -v $STORAGE_DIR:/var/lib/postgresql/data --name mypgdata ubuntu true

# CREATE THE PG
docker run --name mypg -e POSTGRES_PASSWORD=password123 -d -p 5432:5432 --volumes-from mypgdata library/postgres:9.5.4

# RUN IT
docker start mypg
# docker stop mypg

我有 4 个问题:

  1. 如何将在本地持久容器中存储数据的旧方法转移到现代卷中?
  2. 我的权限似乎总是很古怪: $ ls -lah $STORAGE_DIR/.. drwx------ 19 999 root 4.0K 8 月 28 日 10:04 pgdata<br> 我应该采取不同的做法吗?
  3. 我的网络在这里看起来正确吗?这将仅在托管 docker 的机器上可见,或者它是否也发布到我的 wifi 网络上的所有机器?
  4. 除了弱密码、标准端口、默认用户名(例如此处)之外,我还应该注意仅供个人使用的其他安全隐患吗?
  1. 创建一个新卷并将数据复制过来。然后 运行 具有新卷定义的容器。

    docker volume create --name mypgdata
    docker run --rm \
      -v $STORAGE_DIR:/data \
      -v mypgdata:/datanew ubuntu \
      sh -c 'tar -C /data -cf - . | tar -C /datanew -xvf -'
    docker run --rm -v mypgdata:/data ubuntu ls -l /data
    
  2. 权限正常。 UID 999 是 postgres 用户 the postgres image creates.

  3. 端口 5432 将可以在所有 docker 主机接口上访问。如果您只希望它在本地主机上可用,请使用 --port 127.0.0.1:5432:5432

  4. 改为在本地主机上监听可以缓解大多数安全问题,直到有人获得对您的 docker 主机的访问权限。一般安全性对于点点来说是一个过于宽泛的话题。