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






Вот минимальная рабочая настройка, с которой вам следует начать.
├── 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": {
}
}
Я не вижу в этой настройке, где вы устанавливаете учетные данные базы данных ни на сервере, ни в приложении. Вы уверены, что они совпадают?