Как исправить secelize 'npx Sequelize-cli db:migrate' из docker-compose.yml?

я столкнулся

Секвелизация CLI [узел: 21.7.1, CLI: 6.6.2, ORM: 6.37.1] | | Загружен файл конфигурации «database/config/config.json». | Использование среды «производство». | ОШИБКА: доступ запрещен для пользователя «root» @ «172.21.0.3» (с использованием пароля: ДА)

Установка .env.production и применение команды sudo docker compose --env-file ./.env.production up --build.

Вот мой docker-compose.yml:

version: '3.8'

networks:
  common:
    driver: bridge

services:
  db:
    networks: 
      - common
    container_name: database
    volumes:
      - mysql_data:/var/lib/mysql
    restart: on-failure
    ports:
      - 3306:3306
    build:
      context: .
      dockerfile: Dockerfile.mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-p$MYSQL_ROOT_PASSWORD"]
      interval: 1s
      retries: 120
      
  adminer:
    image: adminer
    restart: always
    container_name: adminer-g-database
    links:
      - db:db
    ports:
      - 8080:8080
    
  app:
    networks:
      - common
    build:
      context: .
      dockerfile: Dockerfile.app
    container_name: g-app
    restart: always
    links:
      - db:db
    ports:
      - 3000:3000
    depends_on:
      db: 
        condition: service_healthy

    command: sh -c "npx sequelize-cli db:migrate && npm install && npm run build && npm start"
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules

volumes:
  mysql_data:
    driver: local

Вот мой Dockerfile за Docker.mysql:

#Create MySQL
FROM mysql

LABEL name=gel

EXPOSE 3306

Это приложение nextJS, в котором мы пытаемся создать приложение с запуском контейнера MySQL и применением команды Sequelize миграции. Заранее спасибо

Я не вижу в этой настройке, где вы устанавливаете учетные данные базы данных ни на сервере, ни в приложении. Вы уверены, что они совпадают?

David Maze 24.03.2024 11:26

(Подумайте об удалении ненужных строк из этого файла Compose, чтобы сделать вопрос короче и понятнее. Например, у вас должна быть возможность удалить все строки container_name: и блоки links: и networks:, и я предполагаю, что вы получите тот же результат, если вы используете image: mysql для базы данных без специального файла Dockerfile.)

David Maze 24.03.2024 11:28
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
118
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот минимальная рабочая настройка, с которой вам следует начать.

├── config
│   └── config.json
├── docker-compose.yml
├── Dockerfile.app
├── migrations
└── package.json

Папка migrations у меня пуста.

🗎 config.json (Я настроил это для среды разработки, но вы можете перейти на рабочую среду, как только все заработает.)

{
    "development": {
      "username": "root",
      "password": "password",
      "database": "mysql",
      "host": "db",
      "dialect": "mysql"
    }
  }

🗎 docker-compose.yml

version: '3.8'

services:
  db:
    image: mysql
    restart: on-failure
    environment:
      MYSQL_ROOT_PASSWORD: password
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-p$MYSQL_ROOT_PASSWORD"]
      interval: 1s
      retries: 120

  app:
    build:
      context: .
      dockerfile: Dockerfile.app
    links:
      - db:db
    ports:
      - 3000:3000
    depends_on:
      db:
        condition: service_healthy

🗎 Dockerfile.app

FROM node:16

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

CMD ["sh", "-c", "npx sequelize-cli db:migrate && npm start"]

🗎 package.json (Скрипт start — это просто заполнитель.)

{
    "name": "test",
    "version": "1.0.0",
    "description": "",
    "scripts": {
      "build": "echo 'Build script not defined'",
      "start": "echo 'Start here...'"
    },
    "dependencies": {
      "express": "^4.17.1",
      "mysql2": "^2.3.0",
      "sequelize": "^6.6.5", 
      "sequelize-cli": "^6.2.0"
    },
    "devDependencies": {
    }
  }

Другие вопросы по теме