chrisegb
Creating the correct dockerfile for an API REST in Phoenix
I am trying to dockerize a simple phoenix api rest service I have tried with the next two docker files:
FROM elixir:latest
RUN apt-get update && \
apt-get -y install sudo
ADD . /app
RUN mix local.hex --force \
&& mix local.rebar --force
RUN mix archive.install hex phx_new 1.4.0-dev.0
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
RUN apt-get install -y nodejs
WORKDIR /app
RUN cd assets && npm install
RUN cd ../
RUN mix deps.get
RUN mix compile
EXPOSE 4000
CMD ["mix", "clean"]
CMD ["mix", "ecto.setup"]
CMD ["mix", "phx.server"]
And a more simple one:
FROM elixir:alpine
RUN apk update
ADD . .
RUN mix local.hex --force && mix local.rebar --force
RUN mix archive.install hex phx_new --force
RUN apk update && apk add inotify-tools
RUN mix deps.get
RUN mix compile
CMD ["mix", "clean"]
CMD ["mix", "ecto.setup"]
CMD ["mix", "phx.server"]
With both I am able to create the docker image and also to run the docker container but when I try to hit any endpoint (from postman) I get the next:
Any ideas of why am I getting this?
I have already research about the socket hang up error in postman and may be related to the ports already in use but the problem here is that I am not using any of the ports where I expose or map with my docker container when running docker run -p XXXX:XXXX <image-name>.
Please can you help me with this?
Marked As Solved
chrisegb
FIXED: The problem is that Elixir/Phoenix applications configure the connection from other machines inside the dev.exs file, I had to change the line: http: [ip: {127, 0, 0, 1}, port: 4000] to => http: [ip: {0, 0, 0, 0}, port: 4000], actually the comments in the file explicity says that: “Change to ip: {0, 0, 0, 0} to allow access from other machines.”. Though, thanks to @Sebb for the time answering in this topic.
Also, my final simplest (non-production) Dockerfile looks like this:
FROM elixir:alpine
COPY . .
RUN apk update && apk add inotify-tools
RUN mix local.hex --force && \
mix local.rebar --force
RUN mix do deps.get, deps.compile
EXPOSE 4000
CMD ["mix", "phx.server"]
Also Liked
Sebb
did just that some weeks ago
https://github.com/ahsf/ex_api_release_demo
EDIT: repo is now private again. If there is any further need I can fork it to a pubic repo.
Sebb
the container is meant to run in MIX_ENV=prod which will not use Phoenix.LiveReloader — Phoenix Live-Reload v1.6.2
I will make the repo private again, because we make random changes to this for testing.
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #elixirconf-us
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex











