If you have two, standalone Docker containers, how do you network between them? I have this setup:
- php/apache
- mariadb
Most of the information I could find on the Web was related to using the command line, or was totally inscrutable. I wanted to set this up in docker-compose.yml
so that students could simply download the files and spin up the containers without worrying about configuration. So, for future reference:
You will have a docker-compose.yml
file for each of the containers, and you need to simply add the shared network to each. In this case, we will create a shared network named phpdev
:
container 1:
services: mariadb: image: "mariadb:latest" restart: 'always' ports: - '${LOCAL_MYSQL_PORT}:3306' volumes: - ${LOCAL_MARIADB_DATA_DIR}:${MARIADB_DATA_DIR} env_file: - ${LOCAL_ENV_FILE} environment: MYSQL_ALLOW_EMPTY_PASSWORD: ${MYSQL_ALLOW_EMPTY_PASSWORD} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} networks: default: name: phpdev
container 2:
services: httpd: image: "php:7.4-apache" restart: 'no' ports: - '${LOCAL_HTTP_PORT}:80' volumes: - ${LOCAL_DOCUMENT_ROOT}:/var/www build: context: . dockerfile: ./Dockerfile networks: default: name: phpdev
The first container you spin up will create the network; the second will attach to it. Now, both containers are attached to the phpdev
network, and the PHP/Apache container can make requests to the MariaDB container. Specifically, while creating a Database Connection:
// use the container service name as the host $dbh = new PDO('mysql:host=mariadb;dbname=mydb', 'username', 'mypass');
Took a while to figure this out, but it works nicely.