将.net核心web api连接到不同docker容器上的mysql

7y4bm7vi  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(560)

我有两个docker容器运行在同一个虚拟机上(vmware workstation 12 player上的ubuntu server 18.04)。第一个是mysql容器,它运行在3306端口上,第二个是asp.net core(v2.0)web api(vm上的端口5000,通过nginx导出,端口80)。我的vmapi是192.168.20.197
项目建筑形象
我在web api项目上的连接字符串是: optionsBuilder.UseMySQL("server=localhost;port=3306;database=mydatabase;user=root;CharSet=utf8"); 我的docker文件内容是

FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "DemoMySql.dll"]

我曾尝试在vm上向web api发出http请求,但在尝试与数据库交互时出现服务器响应错误(500)(当我使web api返回示例字符串(如192.168.20.197/api/values/samplestring)时,它仍然正常工作)。那么,如何将webapi连接到不同容器上的mysql呢?
对不起,我语法不好

u0njafvf

u0njafvf1#

用于连接 web apimysql ,您可以添加 Compose 它将为用户创建一个共享网络 web api 以及 mysql ,则可以访问 mysqlservice container name .

version: "3"
  services:
   web:
    build: .
    ports:
      - "8000:8000"
   db:
    image: postgres
    ports:
     - "8001:5432"

你可以访问 dbpostgres://db:5432 ,请参阅撰写中的网络。
对于另一个选项,您可以创建自己的 Bridge networks 在两个容器之间共享网络。参考桥接网络。

up9lanfz

up9lanfz2#

感谢@tao zhou和@nathan werry的建议,我将连接字符串中的localhost替换为虚拟机的ip地址,从而解决了这个问题。然后我使用docker--link标记(docker的遗留特性)将mysql容器链接到webapi容器。

docker run \
--name <webapi-container-name> \
-p 8082:8081 \
--link <mysql-container-name>:<mysql-image> \
-d <webapi-image>

相关问题