docker - невозможно изменить каталог тома - PullRequest
0 голосов
/ 02 августа 2020

Мне не удалось найти решение этой проблемы.

У меня 2 docker контейнеров. frontend и api. Обоим для сборки нужна папка и ее содержимое models. Все эти файлы находятся в папке с именем Website, поэтому дерево будет выглядеть так:

Website:
 -models
 -api
   -dockerfile
 -frontend
   -dockerfile
 -docker-compose.yml

Я новичок в docker и считаю, что это должно быть настроено, мой dockerfile внутри каталога api выглядит так:

FROM node:latest
RUN mkdir -p /usr/src/app/models
WORKDIR /usr/src/app
COPY ./api/package*.json ./
RUN npm install
COPY ./api/ /usr/src/app
EXPOSE 3000
EXPOSE 3001
CMD [ "npm", "start" ]

Это приводит к созданию 2 models папок сбоку от контейнера docker, одна из которых не содержит файлов, расположенных по пути (это то место, где я хочу мое содержимое):

root@0aa4496c9077:/usr/src/app/models#

и еще одна папка, которая содержит контент, который я хочу, но он находится по адресу:

root@0aa4496c9077:/usr/src/app/src/models#

Мой вопрос: как мне сопоставить папка и содержимое из каталога веб-сайта в каталог контейнера docker /usr/src/app/models?

мой фактический файл docker -compose.yml выглядит следующим образом:

version: "3"

services:
    api:
        container_name: api
        restart: always
        build:
            context: ./
            dockerfile: ./api/dockerfile
        ports:
            - "3000:3000"
            - "3001:3001"
        volumes:
            - ./models:./models
        links:
            - mongo

I пытались изменить путь к томам на абсолютный, например:

volumes:
  - $PWD/models:/usr/src/app/models

, но безуспешно: (

Результат сборки при запуске docker-compose build:

mongo uses an image, skipping
Building api
Step 1/8 : FROM node:latest
latest: Pulling from library/node
Digest: sha256:521df806339e2e60dfdee6e00e75656e69798c141bd2cff88c0c9a9c50ad4de5
Status: Downloaded newer image for node:latest
 ---> 4495f296c63b
Step 2/8 : WORKDIR /usr/src/app
 ---> Using cache
 ---> 94f87a509559
Step 3/8 : COPY ./api/package*.json ./
 ---> Using cache
 ---> 3c2e8c17ebf5
Step 4/8 : RUN npm install
 ---> Using cache
 ---> 90dc7d21af18
Step 5/8 : COPY ./api/ /usr/src/app
 ---> 5fa3a2b219ef
Step 6/8 : EXPOSE 3000
 ---> Running in 6ad5fbea1ed8
Removing intermediate container 6ad5fbea1ed8
 ---> b2f8f2f9129c
Step 7/8 : EXPOSE 3001
 ---> Running in 2342665c8da3
Removing intermediate container 2342665c8da3
 ---> 9f1162670b55
Step 8/8 : CMD [ "npm", "start" ]
 ---> Running in fc9d766bd5c1
Removing intermediate container fc9d766bd5c1
 ---> a7267b99b3c2
Successfully built a7267b99b3c2
Successfully tagged website_api:latest

Большое спасибо за любую помощь

1 Ответ

0 голосов
/ 02 августа 2020

Используйте ./models:./models без $PWD, и он должен работать.

./models интерпретируется относительно местоположения файла Compose.

Нет необходимости указывать абсолютный path, просто относительный путь и docker -compose выяснит это.

...