我有两个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呢?
对不起,我语法不好
2条答案
按热度按时间bbuxkriu1#
用于连接
web api
至mysql
,您可以添加Compose
它将为用户创建一个共享网络web api
以及mysql
,则可以访问mysql
与service container name
.你可以访问
db
由postgres://db:5432
,请参阅撰写中的网络。对于另一个选项,您可以创建自己的
Bridge networks
在两个容器之间共享网络。参考桥接网络。bxfogqkk2#
感谢@tao zhou和@nathan werry的建议,我将连接字符串中的localhost替换为虚拟机的ip地址,从而解决了这个问题。然后我使用docker--link标记(docker的遗留特性)将mysql容器链接到webapi容器。