JulienCorb
I am creating a Docker container for my umbrella app that so far contains just one phoenix API app.
This application has simply one DB table that is made of political parties, called “parties”.
when I run docker-compose up and visit http://localhost:4001/api/v1/parties I get the following error: ERROR 42P01 (undefined_table) relation "parties" does not exist
Obviously my table does not exists. However I do run my migrations in my Dockerfile:
# ./Dockerfile
# Elixir base image to start with
FROM elixir:1.8
# install hex package manager
RUN mix local.hex --force
RUN mix local.rebar --force
# install the latest Phoenix
RUN mix archive.install https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez --force
# install NodeJS and NPM
RUN curl -sL https://deb.nodesource.com/setup_10.x -o nodesource_setup.sh
RUN bash nodesource_setup.sh
RUN apt-get install nodejs
RUN apt-get install -y inotify-tools
# create our app folder and copy our code in it and set it as default
RUN mkdir /app
COPY . /app
WORKDIR /app
# install dependencies
RUN mix deps.get
RUN mix deps.compile
# We can't separate the command as each command create a temporary container
# and each container as it own temporary variables
# run migrations
CMD mix ecto.migrate
# run phoenix server. The CMD is run each time the container is launched.
CMD mix phx.server
and here is my docker-compose.yml :
# the version of docker compose we use
version: '2'
services:
# the first container will be called postgres
postgres:
# the image is the last official postgres image
image: postgres
# the volumes allow us to have a shared space between our computer and the docker vm
volumes:
- "./.data/postgres:/var/lib/postgresql"
# set up environment variable for the postgres instance
environment:
POSTGRES_USER: ${PSQL_USER}
POSTGRES_PASSWORD: ${PSQL_PWD}
POOL: 100
# the port to listen
ports:
- "5432:5432"
# the second container is called redis
redis:
# the image is the last official redis image of the version 5
image: redis:5
ports:
- "6379:6379"
volumes:
- ./.data/redis:/var/lib/redis
# set up environment variable for the redis instance
environment:
REDIS_PASSWORD: ${REDIS_PWD}
# our last container is called elixir
elixir:
# build use a path to a Dockerfile
build: .
# we set multiple ports as each of our application (but database) will use a different port
ports:
- "4001:4001"
- "4101:4101"
# we share the entire app with the container, but the libs
volumes:
- ".:/app"
- "/app/deps"
- "/app/apps/admin/assets/node_modules"
# the container will not start if the postgres container isn't running
depends_on:
- postgres
# set up environment variable for the phoenix instance
environment:
POSTGRES_USER: ${PSQL_USER}
POSTGRES_PASSWORD: ${PSQL_PWD}
POSTGRES_DB_TEST: ${PSQL_DB_TEST}
POSTGRES_DB_DEV: ${PSQL_DB}
POSTGRES_HOST: ${PSQL_HOST}
What is wrong with my code ?
Trending in Questions
Hello!
Suppose you are building workflow (order / task / payment) processing system with the following requirements:
Each workflow con...
New
I’m aware of 2 such projects, are there others?
git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
Hi all,
I’m working on a Phoenix project where I need to make external HTTP requests and I’m trying to choose between Req and HTTPoison....
New
Hi everyone.
My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
Hi,
we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New
Hi all, I’m new here and would like to hear peoples views on my Elixir/Phoenix based game-engine! :smiley:
Mutonex gamedesign was finish...
New
Hello
I’ve been coding in Elixir for almost two years now because of my current job where we implemented Elixir in our application. But ...
New
Other Trending Topics
Hey there,
I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first.
...
New
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself.
My main conc...
New
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly)
AI dream has many faces, but general...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #ai
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #blog-post
- #ecto-query
- #elixirconf-us
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #elixirconf-eu
- #api
- #forms
- #security
- #hex










Showing Posts 1 to 9- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
NobbZ
When you build the container, the database does not run. The build of your container should fail.
You need to move creating and migrating the database to your entrypoint.
JulienCorb
Hi @NobbZ, thank you very much for your help !
Indeed I was silencing the postgres’ container logs, I just realised I get
[error] Postgrex.Protocol (#PID<0.279.0>) failed to connect: ** (DBConnection.ConnectionError) tcp connect (172.18.0.2:5432): connection refused - :econnrefusedI manually created my DB though by hand :
docker-compose exec postgres psql user userCREATE DATABASE test_dev; CREATE DATABASE test_test;So I guess all I need is to run the migrations ?
Also I do not understand exactly what you mean by
Does it mean I have to move something in my app’s
endpoint.ex?NobbZ
Entrypoint in this context, is what docker runs as
ENTRYPOINT. You are usingCMDthough.I never really got the difference of these 2, but started to use
ENTRYPOINTonly, about 2 years back, and never had any issues because of this.Basically, you need to run a script which as
CMDorENTRYPOINTthat creates your DB if it did not exist yet, then runs your migrations and only then starts the application.Usually a shell script like this is used:
Put this as
entrypoint.shin your project, andchmod +xit. Make sure its in your container and then useENTRYPOINT entrypoint.shinstead ofCMD.NobbZ
I just realise, you are using two
CMD, this is not allowed, only the lastCMDspecified will be used, it overwrites any previous setCMD.On my first read I saw this as a
RUN.JulienCorb
Thank you very much !!
I think I’m almost there
I created
entrypoint.shat the root of my project, then ranchmod +x /Users/juliencorbin/political_project/entrypoint.shbut got
elixir_1 | /bin/sh: 1: entrypoint.sh: not founddid I run the chmod command wrong ?
NobbZ
Try using
/app/entrypoint.shjust to be sure.JulienCorb
Ok it worked !
but it couldn’t migrate the DB
here are the logs :
maybe I should remove the DB I created by hand ?
NobbZ
No, use the hostname
postgresto connect to the database rather than an IP that you’ll never know if it will be correct after the next restart of the database.Never rely on IPs inside of your
composed network, only ever use the service names, docker provides a DNS under the hood that will let them resolve properly.JulienCorb
oh @NobbZ you are my man, thank you so much ! You just turned my bad day into a dream day
Now I’m on my way to build a kickass umbrella app !