Я пытаюсь подключиться к локально размещенному контейнеру Docker MariaDB. Я использую эту настройку создания докеров:
mariadb:
image: mariadb
container_name: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: conciergedb
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- ${DOCKERPATH}/mariadb:/var/lib/mysql
- ./mariainit:/docker-entrypoint-initdb.d
ports:
- 3306:3306
networks:
network:
ipv4_address: 10.5.0.3
Мне удалось подключиться через mysql cli на ubuntu wsl, используя mysql -h 127.0.0.1 -u brian -p и используя MySQLWorkbench, используя следующую конфигурацию:
Hostname: 127.0.0.1
Port: 3306
Username: brian
Default Schema: conciergedb
Теперь вернемся к .NET (используя MySql.Data.MySqlClient), я использую эту строку подключения:
server=127.0.0.1;port=3306;user id=brian;password=<PASS>;database=conciergedb;ConnectionTimeout=60;
Это вызывает эту ошибку в conn.Open():
System.InvalidCastException: 'Object cannot be cast from DBNull to other types.'
Если я не закрываю соединение, журнал Docker выдает это при выходе из отладки:
[Warning] Aborted connection # to db: 'conciergedb' user: 'brian' host: '10.5.0.1' (Got an error reading communication packets)
Так что это говорит мне, что что-то происходит, но не признается. Есть идеи, что я могу попробовать?
P.S. Я также пытался подключиться к 10.5.0.3 от отчаяния, но безрезультатно.
Ваше приложение также работает внутри контейнера?
Мне удалось подключиться, переключившись на MySqlConnector и переключив режим запуска с Docker на https. На данный момент я собираюсь использовать https, пока полностью не включу приложение в свой скрипт создания докеров. Почему он не подключается при запуске в режиме Docker, сейчас мне не понятно, но я выясню это и обновлю эту тему.
«Почему он не подключается при запуске в режиме Docker, мне сейчас непонятно» — это потому, что 127.0.0.1 при работе в Docker не совпадает с 127.0.0.1 при работе на хост-компьютере. Попробуйте вместо этого использовать host.docker.internal.





Я предполагаю, что ваше приложение также работает в контейнере в той же сети Docker, что и MariaDb. В этом случае проблема заключается в вашей строке подключения. Имя контейнера под управлением MariaDb:
mariadb:
image: mariadb
container_name: mariadb
Поэтому ваша строка подключения к базе данных:
server=mariadb;port=3306;user id=
Обязательно использовать
MySql.Data.MySqlClient? Если нет, попробуйте вместо этого использовать библиотекуMySqlConnector. У меня получилось работать с этой библиотекой. Если это вас устроит, я мог бы также опубликовать свой рабочий код в качестве ответа.