如何在Docker中的CentOS上运行PostgreSQL?

我运行centos:7.1.1503然后yum install postgresql 。 不幸的是,由于系统问题,即使安装了initscripts之后,我仍然无法运行service postgresql start

 Redirecting to /bin/systemctl start postgresql.service /usr/sbin/service: line 79: /bin/systemctl: No such file or directory [root@8109c497195b ~]# yum provides systemctl Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: centos2.hti.pl * extras: centos.komster.pl * updates: centos2.hti.pl systemd-208-20.el7.x86_64 : A System and Service Manager Repo : base Matched from: Filename : /bin/systemctl systemd-208-20.el7_1.2.x86_64 : A System and Service Manager Repo : updates Matched from: Filename : /bin/systemctl systemd-208-20.el7_1.3.x86_64 : A System and Service Manager Repo : updates Matched from: Filename : /bin/systemctl systemd-208-20.el7_1.5.x86_64 : A System and Service Manager Repo : updates Matched from: Filename : /bin/systemctl systemd-208-20.el7.x86_64 : A System and Service Manager Repo : base Matched from: Filename : /usr/bin/systemctl systemd-208-20.el7_1.2.x86_64 : A System and Service Manager Repo : updates Matched from: Filename : /usr/bin/systemctl systemd-208-20.el7_1.3.x86_64 : A System and Service Manager Repo : updates Matched from: Filename : /usr/bin/systemctl systemd-208-20.el7_1.5.x86_64 : A System and Service Manager Repo : updates Matched from: Filename : /usr/bin/systemctl [root@8109c497195b ~]# yum install systemd Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: centos2.hti.pl * extras: centos.komster.pl * updates: centos2.hti.pl Resolving Dependencies --> Running transaction check ---> Package systemd.x86_64 0:208-20.el7_1.5 will be installed --> Processing Dependency: libcryptsetup.so.4(CRYPTSETUP_1.0)(64bit) for package: systemd-208-20.el7_1.5.x86_64 --> Processing Dependency: dbus for package: systemd-208-20.el7_1.5.x86_64 --> Processing Dependency: acl for package: systemd-208-20.el7_1.5.x86_64 --> Processing Dependency: libwrap.so.0()(64bit) for package: systemd-208-20.el7_1.5.x86_64 --> Processing Dependency: libqrencode.so.3()(64bit) for package: systemd-208-20.el7_1.5.x86_64 --> Processing Dependency: libcryptsetup.so.4()(64bit) for package: systemd-208-20.el7_1.5.x86_64 --> Running transaction check ---> Package acl.x86_64 0:2.2.51-12.el7 will be installed ---> Package cryptsetup-libs.x86_64 0:1.6.6-3.el7 will be installed --> Processing Dependency: fipscheck-lib(x86-64) >= 1.3.0 for package: cryptsetup-libs-1.6.6-3.el7.x86_64 --> Processing Dependency: libfipscheck.so.1()(64bit) for package: cryptsetup-libs-1.6.6-3.el7.x86_64 ---> Package dbus.x86_64 1:1.6.12-11.el7 will be installed ---> Package qrencode-libs.x86_64 0:3.4.1-3.el7 will be installed ---> Package tcp_wrappers-libs.x86_64 0:7.6-77.el7 will be installed --> Running transaction check ---> Package fipscheck-lib.x86_64 0:1.4.1-5.el7 will be installed --> Processing Dependency: /usr/bin/fipscheck for package: fipscheck-lib-1.4.1-5.el7.x86_64 --> Running transaction check ---> Package fipscheck.x86_64 0:1.4.1-5.el7 will be installed --> Processing Conflict: fakesystemd-1-17.el7.centos.noarch conflicts systemd --> Finished Dependency Resolution Error: fakesystemd conflicts with systemd-208-20.el7_1.5.x86_64 You could try using --skip-broken to work around the problem ** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows: fakesystemd-1-17.el7.centos.noarch has installed conflicts systemd: fakesystemd-1-17.el7.centos.noarch 

我现在能做什么? 我正在考虑从头开始构build,并以这种方式工作。

不要打扰systemd,直接运行Postgres。 以下显示了如何让Postgres在一个基本的Centos7容器内运行:

 $ docker run -it centos:centos7 /bin/bash bash-4.2$ yum install postgresql-server sudo [..snip..] bash-4.2$ sudo -u postgres /usr/bin/initdb /var/lib/pgsql/data/ bash-4.2$ sudo -u postgres /usr/bin/pg_ctl start \ -D /var/lib/pgsql/data -s -o "-p 5432" -w -t 300 bash-4.2$ ps -eo pid,args PID COMMAND 1 /bin/bash 118 /usr/bin/postgres -D /var/lib/pgsql/data -p 5432 119 postgres: logger process 121 postgres: checkpointer process 122 postgres: writer process 123 postgres: wal writer process 124 postgres: autovacuum launcher process 125 postgres: stats collector process 

你可以把它放到一个Dockerfile中,使它可以重用。