'After I run docker compose up, my mac returns error stating that it can't find my mix phx.server. How do I show docker where my mix.exs file is?

When I'm running Docker Compose up, I receive an error

** (Mix) The task "phx.server" could not be found
Note no mix.exs was found in the current directory

I believe it's the very last step I need to run the project. This is a phoenix/Elixir Docker project. Mix.exs is a top level file in my project, same level as my dockerfile/docker-compose file.

Dockerfile

FROM elixir:1.13.1

# Build Args
ARG PHOENIX_VERSION=1.6.6
ARG NODEJS_VERSION=16.x

# Apt
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y apt-utils
RUN apt-get install -y build-essential
RUN apt-get install -y inotify-tools

# Nodejs
RUN curl -sL https://deb.nodesource.com/setup_${NODEJS_VERSION} | bash
RUN apt-get install -y nodejs

# Phoenix
RUN mix local.hex --force
RUN mix archive.install --force hex phx_new #{PHOENIX_VERSION}
RUN mix local.rebar --force

# App Directory
ENV APP_HOME /app
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME

COPY . .
# App Port
EXPOSE 4000

# Default Command
CMD ["mix", "phx.server"]

Docker-compose.yml


version: "3"

services:
  book-search:
    build: .
    volumes:
      - ./src:/app
    ports:
      - "4000:4000"
    depends_on:
      - db
  db:
    image: postgres:9.6
    environment:
      POSTGRES_DB: "db"
      POSTGRES_HOST_AUTH_METHOD: "trust"
      POSTGRES_USER: tmclean
      POSTGRES_PASSWORD: tmclean
      PGDATA: /var/lib/postgresql/data/pgdata
    restart: always
    volumes:
      - ./pgdata:/var/lib/postgresql/data

Let me know what other questions I can answer



Solution 1:[1]

The problem is your docker-compose.yml file.

volumes:
  - ./src:/app

You are overwriting the app with a probably non-existant src directory. Change it to:

volumes:
  - .:/app

and it should work. However, if you do that, there is no point in copying the files in your Dockerfile, so you can also remove the

COPY . .

Alternatively, leave the COPY if you want the source files to be in the image, and remove the volumes section from the book-search service in docker-compose.yml.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Adam Millerchip