【发布时间】:2018-02-20 13:59:21
【问题描述】:
我正在尝试设置一个 docker-compose 文件,其中包含一个用于 asp.net-core、mysql 数据库和 phpmyadmin 的容器。设置我的 mysql-server 没有问题,我可以使用 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 似乎无法在 localhost 上找到彼此。我尝试在连接字符串中使用 mysql 容器的 IP 地址,但这也不起作用。
我正在使用以下 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"]
感谢您的帮助。
【问题讨论】:
-
“我可以使用 phpmyadmin 访问它” – 但是 在哪里 你会这样做吗?可能来自数据库运行的同一个 docker 容器中?这与您的 Web 应用程序访问它的方式不同。它需要远程连接。 Docker 容器就像独立的计算机。
-
是的,这是我的猜测。 Phpmyadmin 通过 localhost:81 连接到 MySQL 数据库,所以连接似乎存在。
-
你解决了这个帕特里克吗?我有一个类似的问题。我没有使用 compose,但无法让 dotnet core 与 mysql 对话。我当然是使用mysql的启动,验证mysql已经启动并且可以访问等等。
-
不,很遗憾没有。事实上,我放弃了。 :D
标签: mysql asp.net docker asp.net-core docker-compose