Использование Docker compose и томов для сохранения каталога загруженных картинок - PullRequest
0 голосов
/ 27 апреля 2020

Я работаю над электронной коммерцией, я хочу иметь возможность загружать фотографии продуктов с клиента и сохранять их в каталоге на сервере.

Я реализовал эту функцию, но потом понял, что с мы используем docker для нашего развертывания, каталог, в котором я сохраняю изображения, не будет сохраняться. когда я искал, я понял, что должен использовать тома и отобразить этот каталог в docker compose. Я полный начинающий бэкэнд-разработчик (я работаю над внешним интерфейсом), поэтому я не совсем уверен, что мне делать.

Вот файл составления:

version: '3'
services:
  nodejs:
    image: node:latest
    environment:
      - MYSQL_HOST=[REDACTED]
      - FRONT_SITE_ADDRESS=[REDACTED]
      - SITE_ADDRESS=[REDACTED]
    container_name: [REDACTED]
    working_dir: /home/node/app
    ports:
      - "8888:7070"
    volumes:
      - ./:/home/node/app
    command: node dist/main.js
    links:
      - mysql

  mysql:
    environment:
      - MYSQL_ROOT_PASSWORD=[REDACTED]
    container_name: product-mysql
    image: 'mysql:5.7'
    volumes:
      - ../data:/var/lib/mysql

Если я хочу чтобы сохранить мои фотографии в ../static/images (относительно root моего проекта), что я должен делать и как должен ссылаться на этот путь в моем коде бэкэнда?

Бэкэнд находится в nodejs ( гнездо js).

1 Ответ

0 голосов
/ 27 апреля 2020

Вы должны создать volume и сказать docker -compose / docker, чтобы он монтировался в контейнере в указанном вами пути. См. volumes до самого конца файла и параметр volumes в службе nodejs.

version: '3'
services:
  nodejs:
    image: node:latest
    environment:
      - MYSQL_HOST=[REDACTED]
      - FRONT_SITE_ADDRESS=[REDACTED]
      - SITE_ADDRESS=[REDACTED]
    container_name: [REDACTED]
    working_dir: /home/node/app
    ports:
      - "8888:7070"
    volumes:
      - ./:/home/node/app
      - static-files:/home/node/static/images
    command: node dist/main.js
    links:
      - mysql

  mysql:
    environment:
      - MYSQL_ROOT_PASSWORD=[REDACTED]
    container_name: product-mysql
    image: 'mysql:5.7'
    volumes:
      - ../data:/var/lib/mysql
volumes:
 static-files:{}

При этом пустой контейнер будет помещен в ящик, сохраняя ваши данные, и каждый раз, когда новый контейнер монтирует этот путь, вы можете получить данные, хранящиеся на нем. Я бы предложил использовать тот же подход с mysql вместо сохранения данных внутри хоста.

https://docs.docker.com/compose/compose-file/#volume -configuration-reference

...