Search code examples
databasedockerdocker-composedatabase-connectionroots-sage

Cannot get my docker-compose file to work with roots' bedrock


Cheers people šŸ™‹šŸ½ā€ā™‚ļø

I'm currently working on a wordpress site for a friend. Since I set myself the goal, to only work with docker locally, I tried to dockerize my setup. The setup is based on roots' bedrock & sage systems.

Since there already is a wordpress docker-compose (provided by wordpress), I used this a the base for my docker-compose file, edited the appropriate data & started using it.

I can seem to get to my wp instance. So no problem here. Unfortunately, I'm not able to connect to the database container from my wp container.

I've tried to change env vars, ports/links in the docker-compose file but nothing seems to work.

# the compose file
---
  version: "3"

  services:
    wordpress-db:
      image: mariadb:latest
      volumes:
        - wordpress-db-data:/var/lib/mysql
      restart: always
      environment:
        MYSQL_ROOT_PASSWORD: somewordpress
        MYSQL_DATABASE: wordpress
        MYSQL_USER: wordpress
        MYSQL_PASSWORD: wordpress
      container_name: wordpress-db
      ports:
        - '3306:3306'

    wordpress-wp:
      depends_on:
        - wordpress-db
      image: wordpress:latest
      links:
        - wordpress-db
      volumes:
        - ./web:/var/www/html
        - ./config:/var/www/config
        - ./vendor:/var/www/vendor
        - ./.env:/var/www/.env
        - ./composer.json:/var/www/composer.json
        - ./wp-cli.yml:/var/www/wp-cli.yml
      ports:
      - '80:80'
      restart: always
      container_name: wordpress-wp
  volumes:
    wordpress-db-data:
      driver: local
# the env file
DB_NAME=wordpress
DB_USER=wordpress
DB_PASSWORD=wordpress

# Optionally, you can use a data source name (DSN)
# When using a DSN, you can remove the DB_NAME, DB_USER, DB_PASSWORD, and DB_HOST variables
DATABASE_URL=mysql://wordpress:wordpress@localhost:3306/wordpress

# Optional variables
# DB_HOST=
# DB_PREFIX=wp_

WP_ENV=development
WP_HOME=localhost
WP_SITEURL=${WP_HOME}/wp

# Generate your keys here: https://roots.io/salts.html
AUTH_KEY='6&J&.WDf,VGfb!i@2B6TW-294-R|B?dZ1K1b7_Ms<Dbu9a9-Iud<B$*LC1{lU)m!'
SECURE_AUTH_KEY='#MgCVGx.KWV6R*lk:esocM5f#qucQ>N4gq#|`pdgI+ROF<b6|Q8K!.Yu6jXI@I!p'
LOGGED_IN_KEY='#dOrYLz[JlxSwlWgY6oE:0/(6fsxL_x$6amRw?A:i(oaUK]U+W5S!z%CgiA,B[T3'
NONCE_KEY='A8Dl3^6H6p=q1jR/(m1HLR|^k-A}WGiR$Q!bbfu.`|udsNr>s?bMV^L+mWYY?*5Z'
AUTH_SALT='9<(xi|RS.+x0h6z+XbErRKoQlE1wG`X>)!xb5zW1}dZPQ$,+OS[Z_ev2KdZSOjR0'
SECURE_AUTH_SALT='tj(#5`or}_Afs.lZOT@4NdTaNU!s+Y0e=4oWHywgVi9B.U6vo*Y5$s;f`>WwGx}L'
LOGGED_IN_SALT='tw*Wcin=d8T.7w+)$oei:?|clZ1;-hCc||KgI[Zm[P*O+i4YE9_7:|^6_&AnpYyN'
NONCE_SALT='PPjSg+}.N5u&zfex[o[9<3m6dWSQFWeSW00;;B5E(Dn{nLFZ:k)MzVbjsUC5E0|$'
# the folder structure
.
ā”œā”€ā”€ CHANGELOG.md
ā”œā”€ā”€ LICENSE.md
ā”œā”€ā”€ README.md
ā”œā”€ā”€ composer.json
ā”œā”€ā”€ composer.lock
ā”œā”€ā”€ config
ā”‚Ā Ā  ā”œā”€ā”€ application.php
ā”‚Ā Ā  ā””ā”€ā”€ environments
ā”œā”€ā”€ docker-compose.dev.yml
ā”œā”€ā”€ docker-compose.yml
ā”œā”€ā”€ vendor
ā”‚Ā Ā  ā”œā”€ā”€ autoload.php
ā”‚Ā Ā  ā”œā”€ā”€ bin
ā”‚Ā Ā  ā”œā”€ā”€ composer
ā”‚Ā Ā  ā”œā”€ā”€ oscarotero
ā”‚Ā Ā  ā”œā”€ā”€ phpoption
ā”‚Ā Ā  ā”œā”€ā”€ roots
ā”‚Ā Ā  ā”œā”€ā”€ squizlabs
ā”‚Ā Ā  ā”œā”€ā”€ symfony
ā”‚Ā Ā  ā””ā”€ā”€ vlucas
ā”œā”€ā”€ web
ā”‚Ā Ā  ā”œā”€ā”€ app
ā”‚Ā Ā  ā”œā”€ā”€ index.php
ā”‚Ā Ā  ā”œā”€ā”€ wp
ā”‚Ā Ā  ā””ā”€ā”€ wp-config.php
ā””ā”€ā”€ wp-cli.yml

I expect this to actually work. Unfortunately, WordPress (on localhost) tells me, that there's an 'Error establishing a database connection'. Here's a screenshot: https://d.pr/i/hZrDUk

This is the terminal output when starting the containers:

āžœ  mb-wp git:(master) āœ— docker-compose -f docker-compose.dev.yml up --force-recreate --build
Creating volume "mb-wp_wordpress-db-data" with local driver
Creating wordpress-db ... done
Creating wordpress-wp ... done
Attaching to wordpress-db, wordpress-wp
wordpress-db    | Initializing database
wordpress-wp    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.112.3. Set the 'ServerName' directive globally to suppress this message
wordpress-wp    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.112.3. Set the 'ServerName' directive globally to suppress this message
wordpress-wp    | [Mon Jul 08 08:14:42.817813 2019] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.25 (Debian) PHP/7.3.6 configured -- resuming normal operations
wordpress-wp    | [Mon Jul 08 08:14:42.817965 2019] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
wordpress-db    | 
wordpress-db    | 
wordpress-db    | PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
wordpress-db    | To do so, start the server, then issue the following commands:
wordpress-db    | 
wordpress-db    | '/usr/bin/mysqladmin' -u root password 'new-password'
wordpress-db    | '/usr/bin/mysqladmin' -u root -h  password 'new-password'
wordpress-db    | 
wordpress-db    | Alternatively you can run:
wordpress-db    | '/usr/bin/mysql_secure_installation'
wordpress-db    | 
wordpress-db    | which will also give you the option of removing the test
wordpress-db    | databases and anonymous user created by default.  This is
wordpress-db    | strongly recommended for production servers.
wordpress-db    | 
wordpress-db    | See the MariaDB Knowledgebase at http://mariadb.com/kb or the
wordpress-db    | MySQL manual for more instructions.
wordpress-db    | 
wordpress-db    | Please report any problems at http://mariadb.org/jira
wordpress-db    | 
wordpress-db    | The latest information about MariaDB is available at http://mariadb.org/.
wordpress-db    | You can find additional information about the MySQL part at:
wordpress-db    | http://dev.mysql.com
wordpress-db    | Consider joining MariaDB's strong and vibrant community:
wordpress-db    | https://mariadb.org/get-involved/
wordpress-db    | 
wordpress-db    | Database initialized
wordpress-db    | MySQL init process in progress...
wordpress-db    | 2019-07-08  8:14:44 0 [Note] mysqld (mysqld 10.4.6-MariaDB-1:10.4.6+maria~bionic) starting as process 106 ...
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: Using Linux native AIO
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: Uses event mutexes
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: Number of pools: 1
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: Using SSE2 crc32 instructions
wordpress-db    | 2019-07-08  8:14:44 0 [Note] mysqld: O_TMPFILE is not supported on /tmp (disabling future attempts)
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: Completed initialization of buffer pool
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: 128 out of 128 rollback segments are active.
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: Creating shared tablespace for temporary tables
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: Waiting for purge to start
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: 10.4.6 started; log sequence number 139827; transaction id 21
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
wordpress-db    | 2019-07-08  8:14:44 0 [Note] Plugin 'FEEDBACK' is disabled.
wordpress-db    | 2019-07-08  8:14:44 0 [Note] InnoDB: Buffer pool(s) load completed at 190708  8:14:44
wordpress-db    | 2019-07-08  8:14:44 0 [Warning] 'user' entry 'root@ed060ae69169' ignored in --skip-name-resolve mode.
wordpress-db    | 2019-07-08  8:14:44 0 [Warning] 'user' entry '@ed060ae69169' ignored in --skip-name-resolve mode.
wordpress-db    | 2019-07-08  8:14:44 0 [Warning] 'proxies_priv' entry '@% root@ed060ae69169' ignored in --skip-name-resolve mode.
wordpress-db    | 2019-07-08  8:14:44 0 [Note] Reading of all Master_info entries succeeded
wordpress-db    | 2019-07-08  8:14:44 0 [Note] Added new Master_info '' to hash table
wordpress-db    | 2019-07-08  8:14:44 0 [Note] mysqld: ready for connections.
wordpress-db    | Version: '10.4.6-MariaDB-1:10.4.6+maria~bionic'  socket: '/var/run/mysqld/mysqld.sock'  port: 0  mariadb.org binary distribution
wordpress-db    | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
wordpress-db    | 2019-07-08  8:14:58 10 [Warning] 'proxies_priv' entry '@% root@ed060ae69169' ignored in --skip-name-resolve mode.
wordpress-db    | 
wordpress-db    | 2019-07-08  8:14:58 0 [Note] mysqld (initiated by: unknown): Normal shutdown
wordpress-db    | 2019-07-08  8:14:58 0 [Note] Event Scheduler: Purging the queue. 0 events
wordpress-db    | 2019-07-08  8:14:58 0 [Note] InnoDB: FTS optimize thread exiting.
wordpress-db    | 2019-07-08  8:14:58 0 [Note] InnoDB: Starting shutdown...
wordpress-db    | 2019-07-08  8:14:58 0 [Note] InnoDB: Dumping buffer pool(s) to /var/lib/mysql/ib_buffer_pool
wordpress-db    | 2019-07-08  8:14:58 0 [Note] InnoDB: Buffer pool(s) dump completed at 190708  8:14:58
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: Shutdown completed; log sequence number 139836; transaction id 24
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: Removed temporary tablespace data file: "ibtmp1"
wordpress-db    | 2019-07-08  8:14:59 0 [Note] mysqld: Shutdown complete
wordpress-db    | 
wordpress-db    | 
wordpress-db    | MySQL init process done. Ready for start up.
wordpress-db    | 
wordpress-db    | 2019-07-08  8:14:59 0 [Note] mysqld (mysqld 10.4.6-MariaDB-1:10.4.6+maria~bionic) starting as process 1 ...
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: Using Linux native AIO
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: Uses event mutexes
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: Number of pools: 1
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: Using SSE2 crc32 instructions
wordpress-db    | 2019-07-08  8:14:59 0 [Note] mysqld: O_TMPFILE is not supported on /tmp (disabling future attempts)
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: Completed initialization of buffer pool
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: 128 out of 128 rollback segments are active.
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: Creating shared tablespace for temporary tables
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: 10.4.6 started; log sequence number 139836; transaction id 21
wordpress-db    | 2019-07-08  8:14:59 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
wordpress-db    | 2019-07-08  8:14:59 0 [Note] Plugin 'FEEDBACK' is disabled.
wordpress-db    | 2019-07-08  8:15:00 0 [Note] Server socket created on IP: '::'.
wordpress-db    | 2019-07-08  8:15:00 0 [Note] InnoDB: Buffer pool(s) load completed at 190708  8:14:59
wordpress-db    | 2019-07-08  8:15:00 0 [Warning] 'proxies_priv' entry '@% root@ed060ae69169' ignored in --skip-name-resolve mode.
wordpress-db    | 2019-07-08  8:15:00 0 [Note] Reading of all Master_info entries succeeded
wordpress-db    | 2019-07-08  8:15:00 0 [Note] Added new Master_info '' to hash table
wordpress-db    | 2019-07-08  8:15:00 0 [Note] mysqld: ready for connections.
wordpress-db    | Version: '10.4.6-MariaDB-1:10.4.6+maria~bionic'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
wordpress-wp    | [Mon Jul 08 08:16:40.801399 2019] [php7:warn] [pid 17] [client 192.168.112.1:47502] PHP Warning:  mysqli_real_connect(): (HY000/2002): No such file or directory in /var/www/html/wp/wp-includes/wp-db.php on line 1612
wordpress-wp    | 192.168.112.1 - - [08/Jul/2019:08:16:40 +0000] "GET / HTTP/1.1" 200 1737 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"

Solution

  • You are not providing Wordpress the proper Database URL in your config file:

    # Won't work
    DATABASE_URL=mysql://wordpress:wordpress@localhost:3306/wordpress
    

    As you are providing Wordpress localhost as DB Host, it tries to connect to it using the MySQL local socket but it does not exists in your container, causing this No such file error.

    As per Docker Compose doc:

    Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name.

    In other words, your database service named wordpress-db is reachable from your wordpress container via hostname wordpress-db. You should specify in your config:

    DATABASE_URL=mysql://wordpress:wordpress@wordpress-db:3306/wordpress
    

    or

    DB_HOST=wordpress-db
    

    You can check the wordpress-db service is reachable from your wordpress-wp service with

    docker exec [wordpress-wp-container-name] getent hosts wordpress-db