Docker 带有外部数据容器的 postgresql 容器
Docker postgresql container with external data container
我有一个带有 Dockerfile 的数据容器:
from ubuntu:latest
VOLUME ["/var/lib/postgresql/9.3/main"]
和一个 postgresql 服务容器:
#install stuff
............
# Set the default command to run when starting the container
CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"]
然后我启动数据容器和postgresql容器:
docker 运行 -i -t -d --name 数据 docker:data
docker run -i -t -p 49131:5432 --name postgresql --volumes-from data --rm docker:postgresql
它说:
FATAL: data directory "/var/lib/postgresql/9.3/main" has wrong ownership
HINT: The server must be started by the user that owns the data directory.
/var/lib/postgresql/9.3/main
文件夹似乎属于 data
容器中的根用户。然后我附加到容器,添加用户并将该文件夹的所有者更改为 postgres:
docker attach data
useradd postgres -s /bin/bash
chown -R postgres:postgres /var/lib/postgresql
然后重试,同样的错误。
问题是什么,我错过了什么?
可能没有在单独的容器中为 postgres 用户分配相同的 UID。
虽然没有必要让它变得如此困难,只需使用 postgres 图像来创建您的数据容器,例如:
docker run --name data-container postgres echo "Data Container"
这样所有权限都会正确设置。有关详细信息,请参阅:
我有一个带有 Dockerfile 的数据容器:
from ubuntu:latest
VOLUME ["/var/lib/postgresql/9.3/main"]
和一个 postgresql 服务容器:
#install stuff
............
# Set the default command to run when starting the container
CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"]
然后我启动数据容器和postgresql容器:
docker 运行 -i -t -d --name 数据 docker:data
docker run -i -t -p 49131:5432 --name postgresql --volumes-from data --rm docker:postgresql
它说:
FATAL: data directory "/var/lib/postgresql/9.3/main" has wrong ownership
HINT: The server must be started by the user that owns the data directory.
/var/lib/postgresql/9.3/main
文件夹似乎属于 data
容器中的根用户。然后我附加到容器,添加用户并将该文件夹的所有者更改为 postgres:
docker attach data
useradd postgres -s /bin/bash
chown -R postgres:postgres /var/lib/postgresql
然后重试,同样的错误。
问题是什么,我错过了什么?
可能没有在单独的容器中为 postgres 用户分配相同的 UID。
虽然没有必要让它变得如此困难,只需使用 postgres 图像来创建您的数据容器,例如:
docker run --name data-container postgres echo "Data Container"
这样所有权限都会正确设置。有关详细信息,请参阅: