Докер: привязки не работают, как я ожидал - PullRequest
0 голосов
/ 08 декабря 2018

В большинстве случаев я использую Docker с томами.Но сейчас я впервые пытаюсь использовать крепления, и они работают не так, как я ожидал.Возможно, я что-то упускаю или, возможно, не совсем понимаю, как они работают.

Давайте рассмотрим этот пример.У меня есть приложение React, созданное с create-react-app, и оно будет работать с бэкэндом Rails на основе базы данных MySQL.

Моя структура каталогов:

App
├── docker
│   ├── api
│   │   └── Dockerfile
│   └── fe
│       ├── Dockerfile
│       ├── package.json
│       ├── package-lock.json
│       ├── public
│       ├── README.md
│       └── src
├── docker-compose.yml

Я начал с создания файла docker-compose.yml следующим образом:

version: "3.7"

services:

  web:
    build: ./docker/fe/.
    ports: ["80:3000"]
    volumes:
      - type: bind
        source: "./docker/fe"
        target: "/app"

Как видите, я отображаюкаталог ./docker/fe, где находится интерфейс React, до /app.

Внутри ./docker/fe находится файл Docker:

FROM node:8

WORKDIR /app

RUN npm install

CMD ["npm","start"]

Я ожидал, что это сработает, потому что файлы моего приложениявсе внутри /app, сопоставлены с ./docker/fe.По крайней мере, я думал, что они будут!Но когда я запускаю команду docker-compose up --build в командной строке, я получаю ошибку сборки, потому что она говорит, что в каталоге /app нет файла package.json.

С другой стороны, когда я используюэта другая версия Dockerfile

FROM node:8

WORKDIR /app

ADD package.json .

ADD package-lock.json .

RUN npm install

ADD . .

CMD ["npm","start"]

эта проблема не произойдет.Он найдет файл package.json и правильно соберет приложение.Но он не запустится!

Дело в том, что он скажет, что не может найти скрипты React.И это не удивительно, поскольку, когда он закончен, в ./docker/fe нет каталога node_modules, как можно было бы ожидать после запуска npm install.

Я в замешательстве.

  • Я что-то упускаю из-за монтирования bind?

  • Зачем мне ДОБАВИТЬ package.json в WORKDIR, если этот каталог связан с каталогом хоста, где находится этот файлуже есть?

  • Почему у меня нет каталога node_modules внутри ./docker/fe после npm install?

1 Ответ

0 голосов
/ 08 декабря 2018

Тома Docker монтируются только в том случае, если образ выполняется , а не во время build phase.

Добавьте их обратно в Dockerfile:

ADD package.json .

ADD package-lock.json .

И / или:

ADD . .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...