Настройте aspnetcore с базой данных MySQL в докере
Я пытаюсь настроить файл docker-compose с контейнером для asp.net-core, базы данных mysql и phpmyadmin. Нет проблем с настройкой моего mysql-сервера, я могу получить к нему доступ через phpmyadmin. Также мое приложение asp.net-core работает правильно, и я могу получить к нему доступ в браузере.
Однако я не могу установить соединение с моей базой данных MySQL. Приложение продолжает возвращаться:
Невозможно подключиться к любому из указанных хостов MySQL
Приложение подключается через строку подключения в appsettings.json.
{
"ConnectionStrings": {
"FlowerAPIConnection": "server=localhost;userid=user;password=user;database=bloemenapi_db;Convert Zero Datetime=True"
},
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Warning"
}
},
"Console": {
"LogLevel": {
"Default": "Warning"
}
}
}
}
Я предполагаю, что в контейнере Docker приложение и mysql не могут найти друг друга на локальном хосте. Я попытался использовать IP-адрес контейнера mysql в строке подключения, но это также не сработало.
Я использую следующие docker-compose.yml и Dockerfile.
version: '3'
services:
db:
image: mysql
restart: always
container_name: flowerapi-db
environment:
- MYSQL_USER=root
- MYSQL_PASSWORD=user
- MYSQL_ROOT_PASSWORD=user
- MYSQL_DATABASE=bloemenapi_db
ports:
- "3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: flowerapi-pma
ports:
- "81:80"
external_links:
- db:mysql
environment:
PMA_HOST: "db"
PMA_PORT: 3306
web:
image: flowerapi
container_name: flowerapi-web
build:
context: ./FlowerAPI
dockerfile: Dockerfile
ports:
- "5000:80"
links:
- db
depends_on:
- db
Dockerfile
FROM microsoft/aspnetcore:2.0
LABEL name "flower-api"
ARG source
WORKDIR /app
EXPOSE 5000/tcp
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "FlowerAPI.dll"]
Спасибо за вашу помощь.
4 ответа
Контейнер по умолчанию не позволяет никому входить на сервер в качестве пользователя root извне контейнера. Это не позволяет другим контейнерам (или хосту тоже) подключаться к базе данных (используя учетные данные root). Вы можете использовать флаг MYSQL_ROOT_HOST для передачи IP-адреса контейнера или хоста, который должен быть разрешен для подключения к серверу с корневыми учетными данными. Например. Чтобы разрешить хост подключаться, вы должны установить MYSQL_ROOT_HOST="172.17.0.1
".
Также я вижу, что вы создали только пользователя root, но в строке подключения вы используете userid=user
, Ты можешь использовать server=127.0.0.1
как имя хоста.
Попробуй это. Строка подключения немного отличается от MSSQL
"ConnectionStrings":{
"FlowerAPIConnection":"Server=db;port=3306;Database=bloemenapi_db;User=user;Password=password;"
}
Соединитель MySql необходим для подключения приложений.NET с MySql db. Вам нужно будет установить этот соединитель в вашем основном контейнере приложения asp.net
localhost находится внутри каждого контейнера, он не будет работать. Попробуйте подключиться с помощью db
как имя хоста, так и порт 3306
,