从web api.net核心容器连接到mysql容器?如何获取ip地址?

von4xj4u  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(393)

我知道这是一个这样的noob问题,但我很难理解如何让我的.net核心网站连接到我的mysql容器。因此,mysql和.net核心网站都在各自的容器中。我已经启动了mysql容器并设置了根帐户。我在.net核心项目中使用实体框架。
我使用以下语句创建了mysql容器: docker run --name mysql_container -d -p 3306:3306 下面是visualstudio为我生成的dockerfile。
所以,如果ip可以更改,我应该告诉我的.net核心程序mysql容器的ip地址是什么?
.net核心程序内部:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            var connection = $"Server={GetDBAddress()};Database=myDataBase;Uid=root;Pwd=root;";
            services.AddDbContext<ToDoContext>(options => options.UseMySQL(connection));
        }

如果我写getdbaddress函数,里面有什么?我不能简单地返回localhost,因为它是另一个docker容器?现在我正在尝试使用localhost,但连接被拒绝了。但是我可以使用workbench连接到mysql数据库。
我也不确定,但这两个设置是否可以合并到某个文件中,我想它们可能被称为docker compose files?
dockerfile文件

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY ["ToDoService/ToDoService.csproj", "ToDoService/"]
RUN dotnet restore "ToDoService/ToDoService.csproj"
COPY . .
WORKDIR "/src/ToDoService"
RUN dotnet build "ToDoService.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "ToDoService.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ToDoService.dll"]
jtw3ybtb

jtw3ybtb1#

如果您已经启动了mysql,并且暴露了端口,那么您应该能够通过连接来访问它 localhost ,带端口 3306 . 否则,正如你所建议的,有可能建立一个 docker-compose file . 此文件通常包含应用程序运行所需的所有配置。因此,例如,适合您的应用程序的配置(注意:我假设您使用的是MySQL5.7,因为您还没有指定一个)可以是:

version: '3.3'

services: # list of services composing your application
   db: # the service hosting your MySQL instance
     image: mysql:5.7 # the image and tag docker will pull from docker hub
     volumes: # this section allows you to configure persistence within multiple restarts
       - db_data:/var/lib/mysql
     restart: always # if the db crash somehow, restart it
     environment: # env variables, you usually set this to override existing ones
       MYSQL_ROOT_PASSWORD: root
       MYSQL_DATABASE: todoservice
       MYSQL_USER: root
       MYSQL_PASSWORD: root
   todoservice: # you application service
     build: ./ # this tells docker-compose to not pull from docker hub, but to build from the Dockerfile it will find in ./
     restart: always
     depends_on: # set a dependency between your service and the database: this means that your application will not run if the db service is not running, but it doesn't assure you that the dabase will be ready to accept incoming connection (so your application could crash untill the db initializes itself)
       - db

volumes:
    db_data: # this tells docker-compose to save your data in a generic docker volume. You can see existing volumes typing 'docker volume ls'

要启动和部署应用程序,现在需要键入终端: docker-compose up 这将启动您的部署。请注意,这里没有暴露任何端口:只有您的服务才能从中访问数据库 db:3306 (您不需要通过ip引用,但可以使用服务名称访问其他服务)。出于调试目的,您仍然可以打开db端口,在下面添加这一行 image :

ports:
  - "3306:3306"

请注意,此端口必须是免费的(没有其他系统服务使用它),否则整个部署将失败。
最后一点注意:由于docker compose会尽量避免在每次启动服务时构建图像,因此要强制它构建一个新的图像,您必须附加它 --builddocker-compose up 命令。
要搞垮你的部署就用 docker-compose down . 要删除与部署相关的所有持久性数据(即从新数据库开始),请附加 -v 上一个命令末尾的标志。
希望有帮助!

相关问题