Phoenix 服务器不呈现 css 和 Docker 的图像

Phoenix server doesn't render css and images with Docker

我是 Elixir 和 Phoenix 的新手,必须在 CI/CD 环境中工作 我正在尝试弄清楚如何将 Phoenix 与 Docker 一起使用。

我尝试了各种教程和视频,其中很多不起作用,但那些起作用的人得到了相同的结果。

Phoenix 服务器似乎没有找到一些资源(assets 文件夹?)。

但在我的 Docker 文件中,我正在复制整个应用程序文件夹,并且我可以通过附加到它来确认 /assets 在容器中。

Docker文件:

FROM elixir:alpine

RUN apk add --no-cache build-base git

WORKDIR /app

RUN mix local.hex --force && \
    mix local.rebar --force

COPY . .

RUN mix do deps.get, deps.compile

CMD ["mix", "phx.server"]

Docker-撰写

version: '3.6'
services:
  db:
    environment:
      PGDATA: /var/lib/postgresql/data/pgdata
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
      POSTGRES_HOST_AUTH_METHOD: trust
    image: 'postgres:11-alpine'
    restart: always
    volumes:
      - 'pgdata:/var/lib/postgresql/data'
  web:
    build: .
    depends_on:
      - db
    environment:
      MIX_ENV: dev
    env_file:
      - .env
    ports:
      - '4000:4000'
    volumes:
      - .:/app
volumes:
  pgdata:

我创建容器和运行服务器的步骤:

docker-compose build
docker-compose run web mix ecto.create
docker-compose up

数据库在db容器中创建成功。 这里会发生什么?

对不起,如果它很简单,我有一段时间没有使用 Docker,我仍然没有完全理解 Phoenix 样板文件。

如果你知道一些关于 Docker 和 CI/CD pipelines with Phoenix 的好资源,我也很感激,所以我可以研究它。

您还需要构建资产。 npm install --prefix assets 这需要在 mix deps.get 之后完成,但可以在 mix deps.compile 之后完成,这并不是真正需要的。您可以在 mix deps.get 之后启动服务器,它会自动编译 deps 和您的应用程序。