While spinning up an Elixir/Phoenix side project I ended up being blocked for longer than I'd like to admit trying to get my app container and database containers to communicate with each other. The fix ended up to not having anything to do with the
docker-compose.yml, but in the
dev.exs config file.
The default database configuration from the
phx.new generation looked like this:
Which works fine when running the app locally, without Docker. But, when starting the app and database containers in Docker, I would get the following error:
What's happening is that the project container is looking for a database named
localhost, but the database is no longer running locally nor by the name
localhost. It is now running as a container by the name declared in the
docker-compose.yml file. In my case I named it
db, so I needed to update the
hostname field of the database
config to this:
Now that I have solved the problem, and know what to look for, I see that it is mentioned in the Docker docs. In hindsight I may have been too rabbit-holed in finding the solution to this problem in blog posts or step-by-steps that were specific to Elixir/Phoenix and Docker, although I am a bit surprised that this step was not mentioned in any of those sources. But, it is documented now, so hopefully I can help save someone else a a bit of time debugging their dockerized Elixir/Phoenix app.
This post is part of an ongoing This Week I Learned series. I welcome any critique, feedback, or suggestions in the comments.