MariaDB en Wordpress met docker-compose --> access denied

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Sa1
  • Registratie: Oktober 2000
  • Laatst online: 18-09 16:40
Enige tijd terug heb ik een Pi4 aangeschaft en ben langzaam alle diensten van mijn ouwe synology aan het overzetten op de Pi4. Ik draai alles in docker en, los dat ik het erg leuk vind om er mee te spelen, werkt het ook verbluffend goed.

Voor de meeste dockers maak ik gebruik van macvlan om de dockers te voorzien van fixed IP adressen zodat alles lekker op 443 en 80 kan draaien.

Ik maak dus gebruik van een Pi4 en draai Linux docker 5.10.11-v7l+. Maak gebruik van docker-compose en DockStarter. Leuke tool, maar niet alle dockers staan in de lijst dus zal zelf ook wat moeten toevoegen.

MariaDB staat wél in de lijst en heb ik derhalve ook via DockStarter geinstalleerd.

Docker-compose.yml:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mariadb:
    image: ghcr.io/linuxserver/mariadb
    hostname: ${DOCKERHOSTNAME}
    ports:
      - ${MARIADB_PORT_3306}:3306
    container_name: mariadb
    environment:
      - MYSQL_ROOT_PASSWORD=${MARIADB_MYSQL_ROOT_PASSWORD}
      - PGID=${PGID}
      - PUID=${PUID}
      - TZ=${TZ}
    logging:
      driver: json-file
      options:
        max-file: ${DOCKERLOGGING_MAXFILE}
        max-size: ${DOCKERLOGGING_MAXSIZE}
    restart: unless-stopped
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ${DOCKERCONFDIR}/mariadb:/config
      - ${DOCKERSTORAGEDIR}:/storage


.env:

code:
1
2
3
4
MARIADB_ENABLED=true
MARIADB_MYSQL_ROOT_PASSWORD=RootPass123
MARIADB_NETWORK_MODE=
MARIADB_PORT_3306=3306


Docker-compose.override.yml:

code:
1
2
3
4
5
6
mariadb:
    hostname: mariadb
    environment:
     - MYSQL_DATABASE=wordpress
     - MYSQL_USER=wordpress
     - MYSQL_PASSWORD=Wordpress123



Wordpress staat niet in DockStarter dus heb ik handmatig gedaan alleen in docker-compose.override.yml:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
wordpress:
    container_name: wordpress
    image: wordpress
    depends_on:
      - mariadb
    environment:
      - WORDPRESS_DB_HOST=172.18.0.5:3306
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=Wordpress123
      - WORDPRESS_DB_NAME=wordpress
    ports:
      - 8000:80
    volumes:
      - ${DOCKERCONFDIR}/wordpress:/var/www/html


Zoals je kunt zien maak ik inmiddels geen gebruik meer van MACVLAN voor deze containers. Ik laat poort 8000 omleiden naar 80 voor wordpress en 3306 is gewoon voor MariaDB. Dit heb ik gedaan om uit te sluiten of het daar mis gaat, maar exact hetzelfde gedrag.

Ik krijg alleen maar access denied, wat ik ook doe. Een snippit uit de log van wordpress:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[09-Feb-2021 12:36:30 UTC] PHP Warning:  mysqli::__construct(): (HY000/1045): Access denied for user 'wordpress'@'wordpress.compose_default' (using password: YES) in Standard input code on line 22

MySQL Connection Error: (1045) Access denied for user 'wordpress'@'wordpress.compose_default' (using password: YES)

MySQL Connection Error: (1045) Access denied for user 'wordpress'@'wordpress.compose_default' (using password: YES)

MySQL Connection Error: (1045) Access denied for user 'wordpress'@'wordpress.compose_default' (using password: YES)

MySQL Connection Error: (1045) Access denied for user 'wordpress'@'wordpress.compose_default' (using password: YES)

MySQL Connection Error: (1045) Access denied for user 'wordpress'@'wordpress.compose_default' (using password: YES)

MySQL Connection Error: (1045) Access denied for user 'wordpress'@'wordpress.compose_default' (using password: YES)

MySQL Connection Error: (1045) Access denied for user 'wordpress'@'wordpress.compose_default' (using password: YES)

MySQL Connection Error: (1045) Access denied for user 'wordpress'@'wordpress.compose_default' (using password: YES)

MySQL Connection Error: (1045) Access denied for user 'wordpress'@'wordpress.compose_default' (using password: YES)

MySQL Connection Error: (1045) Access denied for user 'wordpress'@'wordpress.compose_default' (using password: YES)

WARNING: unable to establish a database connection to '172.18.0.5:3306'
  continuing anyways (which might have unexpected results)


Het maakt dus niet uit welk wachtwoord invoer, het blijft bovenstaande error. Ik heb een erg lang en complex wachtwoord nog gebruikt, maar dat maakt ook niet uit.

Als ik via mysql vanuit mijn Synology hetzelfde probeer, dus: mysql -h docker -u wordpress -p , dan krijg ik dezelfde access denied. Docker resolved keurig naar het juiste IP uiteraard.

Ga ik met docker exec -it mariadb bash naar de shell van de maria container dan kom ik er gewoon in. Als ik dan mysql type dan is hij verbonden, zonder wachtwoord. Probeer ik met -u root -p dan kom ik er dus ook niet in met het wachtwoord wat ik ingesteld heb.

Met het account zonder wachtwoord kan ik gewoon databases aanmaken, users aanmaken maar 't maakt allemaal nix uit, hij blijft access denied geven. Als ik een nieuwe user aanmaak via de CLI in de container, dan kan ik met die user niet verbinden vanaf de synology, in de container zelf wel.

Poort 3306 staat gewoon open:

code:
1
2
3
4
5
PORT     STATE SERVICE
3306/tcp open  mysql
MAC Address: DC:A6:32:DB:A1:3E (Raspberry Pi Trading)

Nmap done: 1 IP address (1 host up) scanned in 1.53 seconds


Waar kan het nu aan liggen dat het niet werkt? Het lijkt alsof de ENV settings niet geset worden want noch de database wordpress noch de user wordpress zijn aanwezig of het root pass werkt. Kijkend op de pagina van het image zijn deze settings wel degelijk ondersteund en zouden ze moeten werken. Kijk ik in portainer dan zie ik ook gewoon de environment settings toegepast.

Na veel uren zoeken en verschillende configs uit te proberen ben ik geneigd het op te geven. Maar zou het graag werkend willen zien.

Beste antwoord (via Sa1 op 12-02-2021 09:48)


  • yvanmidden
  • Registratie: Januari 2008
  • Laatst online: 17-09 19:31
Sa1 schreef op dinsdag 9 februari 2021 @ 14:17:
code:
1
2
    environment:
      - WORDPRESS_DB_HOST=172.18.0.5:3306
Weet je zeker dat dit het goede IP is? Heb je het al een keer vervangen door bijvoorbeeld -WORDPRESS_DB_HOST=mariadb:3306?

Heb je verder al eens geprobeerd alle containers, inclusief volumes weg te gooien en opnieuw -up- te doen? Als je tussendoor de config aanpast is de kans groot dat de initiële configuratie er nog in blijft hangen, vooral bij MariaDB als je de db storage in de container mount.

Alle reacties


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 12:28

Hero of Time

Moderator LNX

There is only one Legend

Het probeert in te loggen met een hostnaam als bron. Als die niet bestaat of niet bekend is, dan kom je idd nergens binnen. Kijk dus eens heel goed wat de host definities zijn van je gebruikers en waarmee je probeert in te loggen. Simpel gezegd, als je wel mysql in komt, wat zie je dan staan bij deze query:
SQL:
1
select User,Host from mysql.user;

Commandline FTW | Tweakt met mate


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • yvanmidden
  • Registratie: Januari 2008
  • Laatst online: 17-09 19:31
Sa1 schreef op dinsdag 9 februari 2021 @ 14:17:
code:
1
2
    environment:
      - WORDPRESS_DB_HOST=172.18.0.5:3306
Weet je zeker dat dit het goede IP is? Heb je het al een keer vervangen door bijvoorbeeld -WORDPRESS_DB_HOST=mariadb:3306?

Heb je verder al eens geprobeerd alle containers, inclusief volumes weg te gooien en opnieuw -up- te doen? Als je tussendoor de config aanpast is de kans groot dat de initiële configuratie er nog in blijft hangen, vooral bij MariaDB als je de db storage in de container mount.

Acties:
  • 0 Henk 'm!

  • Sa1
  • Registratie: Oktober 2000
  • Laatst online: 18-09 16:40
Hero of Time schreef op dinsdag 9 februari 2021 @ 17:15:
Het probeert in te loggen met een hostnaam als bron. Als die niet bestaat of niet bekend is, dan kom je idd nergens binnen. Kijk dus eens heel goed wat de host definities zijn van je gebruikers en waarmee je probeert in te loggen. Simpel gezegd, als je wel mysql in komt, wat zie je dan staan bij deze query:
SQL:
1
select User,Host from mysql.user;
Ik heb de mysql database geselecteerd en daar dit uitgevoerd:

code:
1
2
3
4
5
6
7
8
MariaDB [mysql]> select user Host from user;
+-----------+
| Host      |
+-----------+
| root      |
| wordpress |
+-----------+
2 rows in set (0.00 sec)


Ik begrijp het niet helemaal, kennis gebrek wellicht, maar waar kijk ik naar? Ik snap dat dit de users zijn. Maar wat houdt die host in? Moet ik op een andere manier inloggen?

Acties:
  • 0 Henk 'm!

  • Sa1
  • Registratie: Oktober 2000
  • Laatst online: 18-09 16:40
yvanmidden schreef op dinsdag 9 februari 2021 @ 21:05:
[...]


Weet je zeker dat dit het goede IP is? Heb je het al een keer vervangen door bijvoorbeeld -WORDPRESS_DB_HOST=mariadb:3306?

Heb je verder al eens geprobeerd alle containers, inclusief volumes weg te gooien en opnieuw -up- te doen? Als je tussendoor de config aanpast is de kans groot dat de initiële configuratie er nog in blijft hangen, vooral bij MariaDB als je de db storage in de container mount.
Heb inderdaad al meerdere verschillende manieren geprobeerd. Het interne ip van de docker, de docker naam, het macvlan ip, docker host ip alles wat ik kon bedenken. Heb inderdaad ook de folder configdir/mariadb al een keer leeg gegooid...

Acties:
  • 0 Henk 'm!

  • yvanmidden
  • Registratie: Januari 2008
  • Laatst online: 17-09 19:31
Sa1 schreef op dinsdag 9 februari 2021 @ 22:08:
[...]

Heb inderdaad al meerdere verschillende manieren geprobeerd. Het interne ip van de docker, de docker naam, het macvlan ip, docker host ip alles wat ik kon bedenken. Heb inderdaad ook de folder configdir/mariadb al een keer leeg gegooid...
Start je ze los van elkaar? Als in, heb je twee docker-compose.yml files die je één voor één start?
Dan zou het namelijk kunnen zijn dat de containers niet in hetzelfde netwerk en subnet terecht komen, omdat je in feite twee stacks opstart.
Kan je eens een netwerk toevoegen in de docker-compose.yml en allebei de containers daarin toevoegen, kijken of ze dan kunnen babbelen?

Verder vraag ik me af waarom in de logging komt: 'wordpress'@'wordpress.compose_default'. Waar komt dat compose_default vandaan, want dat zie ik verder nergens in je configs..

Acties:
  • 0 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 13:19

The Eagle

I wear my sunglasses at night

Sa1 schreef op dinsdag 9 februari 2021 @ 22:06:
[...]


Ik heb de mysql database geselecteerd en daar dit uitgevoerd:

code:
1
2
3
4
5
6
7
8
MariaDB [mysql]> select user Host from user;
+-----------+
| Host      |
+-----------+
| root      |
| wordpress |
+-----------+
2 rows in set (0.00 sec)


Ik begrijp het niet helemaal, kennis gebrek wellicht, maar waar kijk ik naar? Ik snap dat dit de users zijn. Maar wat houdt die host in? Moet ik op een andere manier inloggen?
Goed lezen.
Wat @Hero of Time vraagt is:
SQL:
1
select User,Host from mysql.user;


Wat jij doet is
SQL:
1
select user Host from user;


Oftewel, er moet een komma tussen use en host en dan krijg je twee kolommen :)

Waar jij tegenaan loopt is dat je OF de user verkeerd opgeeft in wordpress, OF de user / host combinatie die je in wordpress gebruikt niet bestaat in je MySQL instance.

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Acties:
  • 0 Henk 'm!

  • Sa1
  • Registratie: Oktober 2000
  • Laatst online: 18-09 16:40
The Eagle schreef op woensdag 10 februari 2021 @ 10:37:
[...]

Goed lezen.
Wat @Hero of Time vraagt is:
SQL:
1
select User,Host from mysql.user;


Wat jij doet is
SQL:
1
select user Host from user;


Oftewel, er moet een komma tussen use en host en dan krijg je twee kolommen :)

Waar jij tegenaan loopt is dat je OF de user verkeerd opgeeft in wordpress, OF de user / host combinatie die je in wordpress gebruikt niet bestaat in je MySQL instance.
Wauw, okay.. CSS issue.. er stond bij mij gewoon een tab tussen, bij selecteren krijg ik inderdaad wat anders, sorry! 8)7

code:
1
2
3
4
5
6
7
8
MariaDB [(none)]> select User,Host from mysql.user;
+-----------+-----------+
| User      | Host      |
+-----------+-----------+
| root      | %         |
| wordpress | localhost |
+-----------+-----------+
2 rows in set (0.01 sec)


Dit is nu het resultaat.

Acties:
  • 0 Henk 'm!

  • ninjazx9r98
  • Registratie: Juli 2002
  • Laatst online: 13:22
Dit zijn dus de users en waar ze vandaan mogen komen. Root over het netwerk muv localhost en wordpress alleen via localhost.
Je moet het dus zoeken in je rechten.

Acties:
  • 0 Henk 'm!

  • c-nan
  • Registratie: Juni 2008
  • Laatst online: 10:39
MySQL kijkt niet alleen naar een username en wachtwoord, maar ook host waar vandaan je Connect. Zet je rechten dus even goed.

EU DNS: 86.54.11.100


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 12:28

Hero of Time

Moderator LNX

There is only one Legend

ninjazx9r98 schreef op woensdag 10 februari 2021 @ 18:53:
Dit zijn dus de users en waar ze vandaan mogen komen. Root over het netwerk muv localhost en wordpress alleen via localhost.
Niet helemaal waar. Ook root mag vanaf localhost verbinding maken. Anders had 'ie niet via de CLI in de container zelf kunnen inloggen en een gebruiker kunnen aanmaken.

Bij MySQL is '%' en wildcard en betekent 'alles', vergelijkbaar met *. Als de host 192.168.1.% zou zijn bijvoorbeeld, mag je van elk systeem in dat subnet verbinding maken. En dan krijg je wel dat je van het lokale systeem niet mag verbinden, want je komt niet vanaf het IP adres dat op de NIC staat, maar van localhost. Tenzij je hebt aangegeven dat je databaseserver alleen op een specifiek IP adres beschikbaar is, óf als je het host IP adres gebruikt om naar te verbinden.

De host voor je gebruiker is dus iets complexer dan je zou denken. En dat zorgt dus voor mensen met weinig kennis en/of ervaring vreemde issues die ze niet begrijpen.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • ninjazx9r98
  • Registratie: Juli 2002
  • Laatst online: 13:22
@Hero of Time
Ik meende me te herinneren dat localhost juist uitgezonderd is/was van de wildcard maar kom tegenstrijdige verhalen tegen en zie het ook niet in documentatie.
Met root kan hij overigens ook niet inloggen als hij die bewust kiest, zonder user account specifiek te kiezen lukt het weer wel.
Mogelijk is er een .my.cnf aanwezig met credentials of wordt er gebruik gemaakt van auth_socket.

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 12:28

Hero of Time

Moderator LNX

There is only one Legend

@ninjazx9r98, als localhost voor root met host % niet mogelijk zou zijn, is het heel knap dat ik bij mysql 5.6 met root kan inloggen op de server zelf.

Daarbij, TS zie in de OP het volgende:
Ga ik met docker exec -it mariadb bash naar de shell van de maria container dan kom ik er gewoon in. Als ik dan mysql type dan is hij verbonden, zonder wachtwoord. Probeer ik met -u root -p dan kom ik er dus ook niet in met het wachtwoord wat ik ingesteld heb.
Gezien de uitvoer van de query eerder, wordt er met root ingelogd. Echter zijn credentials niet direct nodig, aangezien zonder iets opgeven het wel werkt en met een wachtwoord niet. Een .my.cnf zou nog kunnen, maar in een docker image is er geen aparte gebruiker tenzij je dat specificeert. Dus tenzij dat bestand er is en een wachtwoord bevat, is dat niet het wachtwoord dat bij het maken van de container is opgegeven.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Sa1
  • Registratie: Oktober 2000
  • Laatst online: 18-09 16:40
Goed, ik heb dus nog een x alles weggegooid. Alle folders leeg gemaakt en opnieuw begonnen. Het werkt nu wel. Zou echt niet weten wat er de vorige x mis gegaan is.

code:
1
2
3
4
5
6
7
8
MariaDB [(none)]> select User,Host from mysql.user;
+-----------+------+
| User      | Host |
+-----------+------+
| root      | %    |
| wordpress | %    |
+-----------+------+
2 rows in set (0.00 sec)


Er wordt dus nu ingelogd met wordpress en het juiste wachtwoord.

Tnx

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 12:28

Hero of Time

Moderator LNX

There is only one Legend

Vorige keer heb je heel simpel "create user 'wordpress' identified by blabla" uitgevoerd en dan wordt er standaard 'localhost' als host gebruikt. Nu heb je waarschijnlijk wel de host opgegeven met '%'.

Commandline FTW | Tweakt met mate

Pagina: 1