Serve multiple docker container with the help of haproxy. Requires a running docker-environment
Multibasebox consists of a simple shell script setting up name resolution and a haproxy container on your local environment.
For serving the different containers a separate docker-container named haproxy-config will be pulled and started.
haproxy is listening on port 80 and 443 and will forward all requests to a specific docker-image. It uses the hostname to distinguish the containers.
Phabalicious is nicely integrated with multibasebox and has a dedicated command to setup multibasebox since version 3.3. Run
phab workspace:createand answer the questions. The scaffolder will create a fabfile.local.yaml suited to your local setup.
That's it!
- Clone this repository,
- Run
bash ./setup-docker.sh - Visit
http://multibasebox.test:1936This will show you the haproxy status page.
If you installed multibasebox with phabalicious, the following part is just for your information, as the phabalicious created this file already. Here's a short example for fabfile.local.yaml, adapt it to your setup and it should work:
dockerHosts:
mbb:
runLocally: true
rootFolder: <absolute-path-to-projects-folder>
hosts:
mbb:
xdebug:
remote_host: docker.for.mac.localhost
blueprint:
xdebug:
remote_host: docker.for.mac.localhostThe script won't run the dnsmasq-container for linux, but there are some workarounds:
-
Create
/etc/NetworkManager/conf.d/00-use-dnsmaq.confwith the following contentdns=dnsmasq -
Create
/etc/NetworkManager/dnsmasq.d/test.confwithlocal=/test/ address=/.test/127.0.0.1 addn-hosts=/etc/hosts -
Restart the NetworkManager with
sudo systemctl restart NetworkManager
Add your hosts to /etc/hosts similar to
127.0.0.1 multibasebox.test <your-other-hosts.test>
dnsmasq is available for a lot of linux distributions and it should be easy to install. Adapt your local config to sth similar.
- Move your project-folder into
projectsor clone a repository into that folder. - Your docker-container should use the environment-variables
VHOSTandVPORT(defaults to 80) to signalize haproxy which hostname should be used and on which port the http-service is listening inside the container. There's no need to expose the ports to the host. See the documentation of haproxy-config
Phabalicious may help you to administrate your project and docker-setup. For more info visit fabalicious It can also new projects.
The containers are setup to restart automatically. If you encounter problems just run
bash setup-docker.sh
You can see the status of haproxy at http://multibasebox.test:1936
Test if name resolution is working:
dscacheutil -q host -a name multibasebox.test
If you get an error message, try restarting mDNSResponder with
sudo killall mDNSResponder
or reboot the machine.
Still not working? Then try the /etc/hosts-route.