Debugging Phoenix applications in Docker


I have a simple phoenix application that I have created a Docker container for. When I start the container, the phoenix app dies with the following message.

app-app-1  | 16:26:07.645 [info] Starting the cache supervisor.
app-app-1  | 16:26:07.646 [info] Loading data from country.csv
app-app-1  | 16:26:07.650 [info] Loading data from nadp.csv
app-app-1  | 16:26:07.668 [info] Application cnamsvc exited: shutdown
app-app-1  | {"Kernel pid terminated",application_controller,"{application_terminated,cnamsvc,shutdown}"}
app-app-1  | Kernel pid terminated (application_controller) ({application_terminated,cnamsvc,shutdown})
app-app-1  |
app-app-1  | Crash dump is being written to: erl_crash.dump...done

I don’t get any additional messages other than the erl_crash.dump which is around 100k lines :\

To troubleshoot this, I did a mix phx.release on a debian bullseye server with the same versions of erlang and elixir as on the docker builder image. After setting the env variables for runtime.,exs, the application starts and runs without any issues.

However when I enter the container and setting the env variables for runtime.exs and try to start the application, I get the same error as before.

nobody@340122f25639:/app$ ./bin/cnamsvc start_iex
Erlang/OTP 24 [erts-12.0.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit]

16:36:00.827 [info] Starting the cache supervisor.
16:36:00.829 [info] Loading data from country.csv
16:36:00.833 [info] Loading data from nadp.csv
16:36:00.853 [info] Application cnamsvc exited: shutdown
{"Kernel pid terminated",application_controller,"{application_terminated,cnamsvc,shutdown}"}
Kernel pid terminated (application_controller) ({application_terminated,cnamsvc,shutdown})

How can I determine what caused the application to fail ? Outside of the erl_crash.dump there are no logs being generated and nothing output to stdout.

I see that you’re starting the app with a manual command. Have you tried the using the built-in Dockerfile generator via mix phx.gen.release --docker?

I’ve had to make a few modifications to get my projects to work (mostly due to npm dependencies), but it’s worked pretty well for me.

Thanks for your reply. I finally figured out that I was not copying the runtime.exs into the container during the build process. Now the app does not crash on startup. I do not however see it listening on the specified port (even though the startup message says it should be) and am troubleshooting that :slight_smile: