首页 > 解决方案 > 为什么我的应用程序 docker 没有连接到我的数据库 docker?

问题描述

这是我的docker-compose.yml文件:

version: "3.9"
services: 
    api:
        image: nefcanto/dotnet-dev
        restart: always
        container_name: DotNetApi
        working_dir: /Api
        environment: 
            - HolismProjectsRoot=/HolismDotNet
        volumes: 
            - /HolismDotNet/Framework:/HolismDotNet/Framework
            - /HolismDotNet/Api:/HolismDotNet/Api
            - .:/Api
        ports: 
            - "5000:5000"
        command: >
            sh -c
            "
            dotnet build
            && dotnet Api/bin/Holism.Geo.Api.dll
            "
        depends_on: 
            - "sql"
    sql:
        image: mcr.microsoft.com/mssql/server:2019-latest
        restart: always
        container_name: Sql
        volumes:
            - ./Database:/var/opt/mssql
        environment: 
            - ACCEPT_EULA=Y
            - SA_PASSWORD=lksU2o412f7tBj58t07B
            - MSSQL_PID=Express
        ports:
            - 1433:1433
        command: >
            sh -c
            "
            tail -f /dev/null
            "

如您所见,我正在开发.NET Core应用程序并且创建了两个容器。这是我的应用程序使用的连接字符串:

data source=sql,1433; initial catalog=Geo; user id=sa; password=password_here

我用sql和进行了测试Sql。但是我的应用程序容器看不到我的数据库容器。

我在 linux 上,我可以使用交互式 shell 连接到我的数据库。

docker exec -it DotNetApi sh -c
# /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P password_here
> select newid();
> go;
                                    
------------------------------------
2FCD5E38-B526-4B76-AB74-A8DF9971D103

(1 rows affected)

我应该怎么办?

标签: sql-serverdocker.net-corecontainers

解决方案


请记住,Docker 仅将 container_name:dynamic_Ip 映射到用户创建的网络上。

显然,您使用的是默认桥接网络,因此您的应用程序将无法找到 sql 或 Sql 或其他任何内容。

你有两种不同的方法来解决这个问题:

  1. docker network create -d bridge my-bridge-network并在该网络上运行这些容器。

  2. 运行容器时,您必须 --link 它们,如文档所示。


推荐阅读