docker icon indicating copy to clipboard operation
docker copied to clipboard

Can't use Postgres Unix Sockets with Wallabag Docker container...

Open dslovin opened this issue 5 years ago • 4 comments

Trying to setup wallabag with postgres database, using unix sockets instead of TCP. Seems like adding this to ansible's entry point should work: database_socket: "{{ lookup('env', 'SYMFONYENVDATABASE_SOCKET')|default('~', true) }}" but unfortunately it isn't.

I have a patch, but it didn't work (so no use in a PR)

Any insights in how to make this work?

dslovin avatar Dec 28 '19 01:12 dslovin

Have you mounted the socket to the correct container?

ptman avatar Jul 29 '20 09:07 ptman

I can not also connect to host's PostgreSQL socket. Maybe SYMFONY__ENV__DATABASE_SOCKET isn't supported as an environment variable?

My docker-compose.yml:

version: "3.8"

services:

  app:
    image: wallabag/wallabag
    ports:
      - "8081:80"
    environment:
      POSTGRES_PASSWORD: wallabag
      POSTGRES_USER: wallabag
      SYMFONY__ENV__DATABASE_DRIVER: pdo_pgsql
      SYMFONY__ENV__DATABASE_DRIVER_CLASS: Wallabag\CoreBundle\Doctrine\DBAL\Driver\CustomPostgreSQLDriver
      SYMFONY__ENV__DATABASE_SOCKET: /var/run/.s.PGSQL.5432
      SYMFONY__ENV__DATABASE_NAME: wallabag
      SYMFONY__ENV__DATABASE_USER: wallabag
      SYMFONY__ENV__DATABASE_PASSWORD: wallabag
    volumes:
      - type: bind
        source: /var/run/postgresql/.s.PGSQL.5432
        target: /var/run/.s.PGSQL.5432

roomcays avatar Sep 22 '20 20:09 roomcays

I also can not get the docker container to respect the SYMFONY__ENV__DATABASE_SOCKET variable. It looks like the container tries to read the SYMFONY__ENV__DATABASE_PORT option which this documentation says it shouldn't (granted that is for the parameters.yml file and not the environment variables)

FAILED! => {"changed": false, "msg": "argument port is of type <class 'str'> and we were unable to convert to int: <class 'str'> cannot be converted to an int"}
wallabag_1  | Starting provisioner...
wallabag_1  | [WARNING]: Found both group and host with same name: localhost
wallabag_1  | [WARNING]: Platform linux on host localhost is using the discovered Python
wallabag_1  | interpreter at /usr/bin/python3, but future installation of another Python
wallabag_1  | interpreter could change this. See https://docs.ansible.com/ansible/2.9/referen
wallabag_1  | ce_appendices/interpreter_discovery.html for more information.
wallabag_1  | PLAY [localhost] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var TASK [Gathering Facts] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var ok: [localhost] TASK [needed dirs] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var ok: [localhost] => (item=/var/www/wallabag/app) ok: [localhost] => (item=/var/www/wallabag/app/config) ok: [localhost] => (item=/var/www/wallabag/data) changed: [localhost] => (item=/var/www/wallabag/data/assets) ok: [localhost] => (item=/var/www/wallabag/data/db) TASK [write parameters.yml] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var changed: [localhost] TASK [stat] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var skipping: [localhost] TASK [notify install for sqlite] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var skipping: [localhost] TASK [wait for db container] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var fatal: [localhost]: FAILED! => {"changed": false, "msg": "argument port is of type <class 'str'> and we were unable to convert to int: <class 'str'> cannot be converted to an int"} RUNNING HANDLER [chown dir] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var PLAY RECAP bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var localhost : ok=3 changed=2 unreachable=0 failed=1 skipped=2 rescued=0 ignored=0
wallabag_1  | Provisioner finished.

Here is my docker-compose file:

version: '3'
services:
  wallabag:
    image: wallabag/wallabag
    volumes:
      - /var/run/postgresql:/var/run/postgresql
      - images:/var/www/wallabag/web/assets/images
    environment:
      - SYMFONY__ENV__DOMAIN_NAME=http://myhosthere
      - SYMFONY__ENV__FOSUSER_REGISTRATION=false
      - SYMFONY__ENV__DATABASE_DRIVER=pdo_pgsql
      - SYMFONY__ENV__DATABASE_SOCKET=/var/run/postgresql
      - SYMFONY__ENV__DATABASE_NAME=wallabag
      - SYMFONY__ENV__DATABASE_USER=wallabag
      - SYMFONY__ENV__DATABASE_PASSWORD=mypasswordhere
      - SYMFONY__ENV__SECRET=mysecrethere
    ports:
      - "8083:80"
    restart: unless-stopped
volumes:
  images: {}

I have confirmed that this method of exposing the socket to an Ubuntu container running the psql command does work.

Hope this helps!

kevinschachtschneider avatar Feb 13 '21 21:02 kevinschachtschneider

PLAY [localhost] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var TASK [Gathering Facts] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var ok: [localhost] TASK [needed dirs] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var ok: [localhost] => (item=/var/www/wallabag/app) ok: [localhost] => (item=/var/www/wallabag/app/config) ok: [localhost] => (item=/var/www/wallabag/data) changed: [localhost] => (item=/var/www/wallabag/data/assets) ok: [localhost] => (item=/var/www/wallabag/data/db) TASK [write parameters.yml] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var changed: [localhost] TASK [stat] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var skipping: [localhost] TASK [notify install for sqlite] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var skipping: [localhost] TASK [wait for db container] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var fatal: [localhost]: FAILED! => {"changed": false, "msg": "argument port is of type <class 'str'> and we were unable to convert to int: <class 'str'> cannot be converted to an int"} RUNNING HANDLER [chown dir] bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var PLAY RECAP bin dev entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var localhost : ok=3 changed=2 unreachable=0 failed=1 skipped=2 rescued=0 ignored=0

@kevinschachtschneider your setup fails because Ansible can't chown images to nobody:nobody on startup.

Try mounting it somewhere else, where it has permissions to chown. (Using --user nobody doesn't work either, as then Ansible fails differently.)

A bind mount might work for you: - ./wallabag-images:/var/www/wallabag/web/assets/images

https://github.com/wallabag/docker/pull/256 might fix this.

jtagcat avatar Aug 25 '21 22:08 jtagcat