首页 > 解决方案 > 使用 Docker 使用 dblib 将 php 5.5 连接到 MSSQL

问题描述

我有一个获取 php5.5 映像的 Dockerfile,然后安装了几个扩展(freetds-dev sendmail libpng-dev zlib1g-dev unixodbc tdsodbc nano)。然后添加一个 freetds.conf 和一个 apache-default conf。

然后我有一个构建 dockerfile 的 docker-composer.yml,但也完成了microsoft/mssql-server-linux图像。

我下载了 MSSQL,我可以通过 PHPStorm 连接它,但我无法使用 PHP 连接它。

这是我的连接字符串:

$dsn = "dblib:host=127.0.0.1:1433;dbname=table;";
$pdo = new PDO($dsn, "sa", "yourStrong(!)Password", [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
        PDO::ATTR_STRINGIFY_FETCHES => true,
    ]);

它不会连接,并给我错误

SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9)' in /var/www/html.

我确实知道要使用的驱动程序安装正确,因为我在使用时可以找到它们phpinfo();

这是在我的 freetds.conf

[mssql]
    host = 127.0.0.1
    port = 1433
    tds version = 7.0

这是我的码头工人撰写:

version: "3"
services:
  php:
    container_name: php55
    build: ./php
    links:
      - mssql
    ports:
      - "8086:80"
      - "8089:443"
    volumes:
      - ./www:/var/www/html
  mssql:
    container_name: mssql
    image: microsoft/mssql-server-linux:latest
    ports:
      - "1433:1433"
    environment:
      ACCEPT_EULA: Y
      SA_PASSWORD: yourStrong(!)Password

我能错过什么?

标签: phpsql-serverdocker

解决方案


问题在于网络。仅使用链接不起作用。所以我创建了一个新网络,docker network create simple-network然后将我的两个容器都添加到该网络中。然后我跑去docker inspect network simple-network获取我的 MSSQL 数据库的 IP。所以我得到了IP,并将其用作主机。

我认为您可以通过 docker-composer 中的网络来做到这一点,这可能要好得多。


推荐阅读