How to run PostgreSQL on CentOS within Docker?

8,298

Don't bother with systemd, run Postgres directly. The following shows how to get Postgres running inside a base Centos7 container:

$ 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  

You can put that into a Dockerfile to make it re-usable.

Share:
8,298

Related videos on Youtube

d33tah
Author by

d33tah

Updated on September 18, 2022

Comments

  • d33tah
    d33tah almost 2 years

    I ran centos:7.1.1503 and then yum install postgresql. Unfortunately, due to systemd problems I cannot run service postgresql start even after installing initscripts:

    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
    

    What can I do now? I'm considering building it from scratch and working this way.

    • womble
      womble almost 9 years
      You might want to uninstall fakesystemd before trying to install systemd.
    • cristi
      cristi over 8 years
      The best thing is to run the postgresql process directly. But, if you want systemd running (if you need multiple services started), check this link: developerblog.redhat.com/2014/05/05/…
  • Eric
    Eric about 4 years
    This solution doesn't help when one want to run off another centos based image. It would be better if you explain and detail how it's done (in the existing image you suggest) so that one can actually implement it in his own image.