Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 216 Vote(s) - 3.46 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Moving Wordpress site to Docker: Error establishing DB connection

#1
Ive been making new sites with Wordpress & Docker recently and have a reasonable grasp of how it all works and Im now looking to move some established sites into Docker.

Ive been following this guide:

[To see links please register here]


I have everything setup as it should be but when I go to my domain.com:1234 I get the error message 'Error establishing a database connection'. I have changed 'DB HOST' to 'mysql' in wp-config.php as advised and all the DB details from the site Im bringing in are correct.

I have attached to the mysql container and checked that the db is there and with the right user and also made sure the pw is correct via mysql CLI too.

SELinux is set to permissive and I havent changed any dir/file ownership nor permissions and for the latter dirs are all 755 and files 644 as they should be.

Edit: I should mention that database/data and everything under that seem to be owned by user/group 'polkitd input' instead of root.

Docker logs aren't really telling me much either apart from the 500 error messages for the WP container when I browse the site on port 1234 (as expected though).

This is the docker-compose file:

version: '2'

services:
example_db:
image: mysql:latest
container_name: example_db
volumes:
- ./database/data:/var/lib/mysql
- ./database/initdb.d:/docker-entrypoint-initdb.d
restart: always
environment:
MYSQL_ROOT_PASSWORD: password123 # any random string will do
MYSQL_DATABASE: mydomin_db # the name of your mysql database
MYSQL_USER: my domain_me # the name of the database user
MYSQL_PASSWORD: password123 # the password of the mysql user

example:
depends_on:
- example_db
image: wordpress:php7.1 # we're using the image with php7.1
container_name: example
ports:
- "1234:80"
restart: always
links:
- example_db:mysql
volumes:
- ./src:/var/www/html

Suggestions most welcome as Im out of ideas!
Reply

#2
Please take a look at the following compose script. I tried and tested. It works fine.

version: '2'

services:
db:
image: mysql:latest
container_name: db_server
volumes:
- ./database/data:/var/lib/mysql
- ./database/initdb.d:/docker-entrypoint-initdb.d
restart: always
environment:
MYSQL_ROOT_PASSWORD: password123 # any random string will do
MYSQL_DATABASE: udb_test # the name of your mysql database
MYSQL_USER: me_prname # the name of the database user
MYSQL_PASSWORD: password123 # the password of the mysql user

example:
depends_on:
- db
image: wordpress:php7.1 # we're using the image with php7.1
container_name: wp-web
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: me_prname
WORDPRESS_DB_PASSWORD: password123
WORDPRESS_DB_NAME: udb_test
ports:
- "1234:80"
restart: always
volumes:
- ./src:/var/www/html

Let me know if you encounter further issues.
Reply

#3
if you want it all in one container you can refer this repo here,

[To see links please register here]


Here from lamp-alpine image is used
Then mysql, php, apache2 (lamp stack) is installed and copied local wordpress demosite and db for demo purpose

if you do not want any kind of continuous integration part ignore .circleci folder
Check docker-compose file and Dockerfile, Environment variables are in .env file
Reply

#4
With the new version of docker-compose it will look like this (if you don't want to use PhpMyAdmin you can leave it out):

version: '3.7'

volumes:
wp-data:
networks:
wp-back:

services:

db:
image: mysql:5.7
volumes:
- wp-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: rootPassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wp-user
MYSQL_PASSWORD: wp-pass
ports:
- 8889:3306
networks:
- wp-back

phpmyadmin:
depends_on:
- db
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: db
MYSQL_USER: wp-user
MYSQL_PASSWORD: wp-pass
MYSQL_ROOT_PASSWORD: rootPassword
ports:
- 3001:80
networks:
- wp-back

wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- 8888:80
- 443:443
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wp-user
WORDPRESS_DB_PASSWORD: wp-pass
volumes:
- ./wordpress-files:/var/www/html
container_name: wordpress-site
networks:
- wp-back

The database volume is a named volume wp-data, while the wordpress html is a bind-mount to your current directory ./wordpress-files .
Reply

#5
If you follow this tutorials ,https://stephenafamo.com/blog/moving-wordpress-docker-container/, your site wil not work properly. Coz It doesn't restore database and you need to restore manually .sql dump file existed in initdb.d dir by using this command.
```
cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql -u root --password=root DATABASE
```
I also stuck in this and my CSS are not working properly.
Please let me know when you have new idea .
Reply

#6
I share with you my approach

Show running version, question to see if all is well on your side!

$ docker --version && docker-compose --version

run Docker Copose file

$ docker-compose -f docker-compose.yml up -d

after you wait fast forward

show running containers and name of the Wordpress Container is listening on port 8000

$ docker ps

you will see the name of your WordPress container on the table as follows if you have followed the steps listed on their site
[

[To see links please register here]

][1]


CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

xxxxxxxxxxxx wordpress:latest "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 0.0.0.0:8000->80/tcp cms_wordpress_1

xxxxxxxxxxxx mysql:5.7 "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 3306/tcp, 33060/tcp cms_db_1


and if you check your browser with the address : [localhost:8000][2]
you will get the message "error establishing DB connection"

launch bash inside the Wordpress container

$ docker exec -it cms_wordpress_1 bash

apt update fails as there is no connectivity

$ apt update

open up new terminal and show current Firewalld configuration

$ sudo cat /etc/firewalld/firewalld-workstation.conf | greb 'FirewallBackend'
currently set to 'nftables'

set value to 'iptables'

$ sudo sed -i 's/FirewallBackend=nftables/FirewallBackend=iptables/g' /etc/firewalld/firewalld-workstation.conf

confirme new value

$ sudo cat /etc/firewalld/firewalld-workstation.conf | grep 'FirewallBackend'

restart Firwalld service to apply change

$ sudo systemctl restart firewalld.service

Refresh the running Wordpress session in your browser and that's good.
good work.


[1]:

[To see links please register here]

[2]:

[To see links please register here]

Reply

#7
make sure that the `wp-config.php` file has same credentials defined for `db_user`, `db_password` as in `docker-composer yml` file. I too had similar problem i deleted all the files and re-installed and saw that `docker-composer up -d` would start everything but the `wp-config.php` file contents for mysql settings were not defined as in docker. so i changed it accordingly and started working eventually
Reply

#8
In some cases a probable cause of this issue could be, you have made volumes using `docker compose up` and then when you did `docker compose down` you expected the volumes to be deleted as well as the docker images, but this is not how it works.

From the [doc][1] you could read this:
> For data that needs to persist between updates, use host or named volumes.

It implicitly means that named volumes will not get deleted with `down`, so what happens is, when you do an `up` and then add a row to a table and then do a subsequent `down`, then on the next `up` you will get the same old volume and so querying the same table would give you the same row you created previously!

What does this have to do with the error `Error establishing DB connection`, you may ask. To answer your question, let's assume one scenario: What if you changed some MYSQL passwords in the docker compose file in between running the `down` command and the second `up` command?

MYSQL keeps __its own data__ just like any other data in its tables, so when you do the second `up`, Docker loads the old volume (the one created by the first `up`) and thus the old credential information will be used by MYSQL and Docker will not even have the opportunity to insert your new information (the ones you changed in the docker compose file) in the administration tables. So obviously, you will be rejected.

The solution thus now would be very simple. To fix it, either do:
```
docker-compose down -v
```
to remove the named volumes as well as the images when running the `down`, or do:
```
docker volume rm [volname]
```
if you've done the down before, and now you want to delete the named volumes.


[1]:

[To see links please register here]

Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through