代码之家  ›  专栏  ›  技术社区  ›  Divyang Desai Jonny B'Good

如何连接ASP的docker映像。NET核心(代码优先)和SQL server

  •  0
  • Divyang Desai Jonny B'Good  · 技术社区  · 7 年前

    我正在处理一个关于nopCommerce的项目,并试图使用docker图像来运行它。有两个映像,一个用于nopCommerce,另一个用于MSSQL服务器。以下是我遵循的步骤,

    1) 构建docker镜像并在8080端口上运行

    C:\Users\Admin>docker run -d -p 8080:80 --name mystore nop420
    ca626cc5ed4e3759a03e9645dcd374016a5d8f278ffede8e1345f851f9a82c7d
    

    该项目在8080端口上运行

    2) 将MSSQL(Express)Linux映像从 Docker Hub

    3) 使用命令运行它

    docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -e 'MSSQL_PID=Express' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest-ubuntu 
    

    4) docker exec -it unruffled_tharp "bash"

    5) /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'yourStrong(!)Password'

    6) 创建数据库

    7) 尝试使用VSCode扩展名连接MSSQL映像,结果正常

    enter image description here

    8) 已将相同的连接字符串传递到nopCommerce安装页

    Data Source=localhost;Initial Catalog=nop420;User ID=sa;Password=yourStrong(!)Password
    

    但它给出了一个错误

    Setup failed: An error occurred while creating the database: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)

    我尝试过使用IP而不是localhost,添加端口1433,以及来自不同论坛的几乎所有内容,尽管错误仍然是一样的。

    编辑: 这里是网络检查

    $ docker network inspect 6cb
    [
        {
            "Name": "mynetwork",
            "Id": "6cb7171b74ee08a55d4ab8c9a26518bfb0a21ee5d8894300a7151453925f550d",
            "Created": "2019-07-16T01:13:46.4791178Z",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "172.18.0.0/16",
                        "Gateway": "172.18.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {
                "ca626cc5ed4e3759a03e9645dcd374016a5d8f278ffede8e1345f851f9a82c7d": {
                    "Name": "mystore",
                    "EndpointID": "dbe46ebc4208bbce5d29c55c40bc0a0809ff3196da5ce7360c6e1a6771fcb7be",
                    "MacAddress": "02:42:ac:12:00:03",
                    "IPv4Address": "172.18.0.3/16",
                    "IPv6Address": ""
                },
                "ca7b383ff3d5118aa15183728084e355619eb28b47d6e60c885a9e5c5af795ba": {
                    "Name": "nostalgic_northcutt",
                    "EndpointID": "6ec4ae69ba2586ce432471e82dcecc94e598e9f9c18f59ef2b557a317adf4736",
                    "MacAddress": "02:42:ac:12:00:02",
                    "IPv4Address": "172.18.0.2/16",
                    "IPv6Address": ""
                }
            },
            "Options": {},
            "Labels": {}
        }
    ]
    
    0 回复  |  直到 7 年前
        1
  •  3
  •   camba1    7 年前

    这通常是因为Docker为容器创建了自己的内部网络,因此这两个容器在默认情况下不会看到对方。所以你有两个选择:

    1. 创建一个docker网络,并将两个容器连接到该网络

    创建新网络:

    docker network create <networkName>
    

    要将容器连接到特定网络,请执行以下操作之一:

    使用docker run和–network标志启动容器时–连接到网络。类似这样(注意网络标志)

    docker run -dit --name <containerName> --network <networkName> <imageName>
    

    使用将已创建的容器连接到网络

    docker network connect <networkName> <containerName>
    

    一旦你设置了网络,你应该能够使用 containerName:PortNumber

    如果容器仍然无法相互通信:

    –通过运行来检查它们是否都在同一个网络中 docker network inspect

    检查是否能接触到另一台机器(从容器内)

    ping <dockerContainerName>
    ping <dockerContainerIPaddress>
    

    检查相应的端口是否打开

    nmap -p <portnumber> <dockerContainerIPaddress>
    
    推荐文章