【问题标题】:Additional SQL Server db container in ddev setup beside web and db containerddev 设置中除了 web 和 db 容器之外的其他 SQL Server db 容器
【发布时间】:2020-02-17 19:24:28
【问题描述】:

我正在尝试在 docker-compose.override.yaml 中的 ddev 配置中获得一个额外的 SQL Server 容器(作为 TYPO3 的多数据库游乐场设置)。

它以某种方式工作,我可以从主机连接到 SQL Server(说实话,运气比知识多;o)。

我绝对不知道如何将新的 mssql 容器连接到 TYPO3 可以访问的 Web 容器。完全没有线索;o(有什么想法吗?

更新: 我的问题取得了一些进展,见下文。它比预期的要简单。 Ddev 正在构建一个额外的 MsSql Server 容器,TYPO3 可以通过额外的数据库配置访问它。

不知道这是否是一个很好的实用方法。如果 TYPO3 中的 MsSql 支持可用,将进行更多调查。

docker-compose.override.yaml:

version: '3.6'

services:
  web:
    environment:
      - TYPO3_CONTEXT=Development/Ddev
    links:
      - mssql:mssql

  mssql:
    # https://hub.docker.com/_/microsoft-mssql-server
    image: "mcr.microsoft.com/mssql/server"
    volumes:
      - mssql-db-data:/var/opt/mssql/
    environment:
      SA_PASSWORD: "MyPassword001"
      ACCEPT_EULA: "Y"
    ports:
      - "1433:1433"
volumes:
  mssql-db-data:
    driver: local

LocalConfigurtion 中的数据库连接:

    'DB' => [
        'Connections' => [
            'Default' => [
                'charset'  => 'utf8',
                'dbname'   => 'db',
                'driver'   => 'mysqli',
                'host'     => 'db',
                'password' => 'db',
                'port'     => 3306,
                'user'     => 'db',            
            ],
            'MsSql' => [
                'charset' => 'UTF-8',
                'dbname' => 'master',
                'driver' => 'sqlsrv',
                'host' => 'mssql',
                'password' => 'MyPassword001',
                'port' => '1433',
                'user' => 'SA',
            ],
        ],
        'TableMapping' => [
            'sys_log' => 'MsSql',
        ],
    ],

更新 2:

这是一个小更新,见下文。

docker-compose.mssql.yaml:

通过这个配置,我在 DDEV 中获得了一个 mssql 容器。

version: '3.6'

services:
  web:
    links:
      - mssql:mssql

  mssql:
    # https://hub.docker.com/_/microsoft-mssql-server
    image: "mcr.microsoft.com/mssql/server"
    volumes:
      - mssql-db-data:/var/opt/mssql/
    environment:
      SA_PASSWORD: "MyPassword001"
      ACCEPT_EULA: "Y"
    ports:
      - "1433:1433"
volumes:
  mssql-db-data:
    driver: local

网络构建/Dockerfile:

网络容器需要额外的包。这个 Dockerfile 非常适合我。 这个链接有一个更高级的解决方案: How to install the SQL Server PHP drivers in DDEV-Local?

# https://ddev.readthedocs.io/en/stable/users/extend/customizing-images/#adding-extra-dockerfiles-for-webimage-and-dbimage
# https://stackoverflow.com/questions/58086933/how-to-install-the-sql-server-php-drivers-in-ddev-local#new-answer
ARG BASE_IMAGE
FROM $BASE_IMAGE

RUN curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list

RUN apt-get update
RUN apt-get --allow-downgrades -y install libssl1.1=1.1.1d-0+deb10u5
RUN apt-get -y update && yes | ACCEPT_EULA=Y apt-get -y install php7.4-dev php-pear unixodbc-dev htop
RUN ACCEPT_EULA=Y apt-get -y install msodbcsql17 mssql-tools
RUN sudo pecl channel-update pecl.php.net
RUN sudo pecl install sqlsrv
RUN sudo pecl install pdo_sqlsrv

RUN sudo printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.3/mods-available/sqlsrv.ini
RUN sudo printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.3/mods-available/pdo_sqlsrv.ini
RUN sudo phpenmod -v 7.3 -s cli sqlsrv pdo_sqlsrv
RUN sudo phpenmod -v 7.3 -s fpm sqlsrv pdo_sqlsrv
RUN sudo phpenmod -v 7.3 -s apache2 sqlsrv pdo_sqlsrv

RUN sudo printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.4/mods-available/sqlsrv.ini
RUN sudo printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.4/mods-available/pdo_sqlsrv.ini
RUN sudo phpenmod -v 7.4 -s cli sqlsrv pdo_sqlsrv
RUN sudo phpenmod -v 7.4 -s fpm sqlsrv pdo_sqlsrv
RUN sudo phpenmod -v 7.4 -s apache2 sqlsrv pdo_sqlsrv

RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile

【问题讨论】:

  • 我不确定我是否理解你的问题,你不知道如何从 web docker 访问 de mssql docker?
  • 您确定需要一个额外的容器,而不仅仅是另一个数据库,对吧?创建数据库非常简单。

标签: docker typo3 ddev


【解决方案1】:

您的配置看起来不错。这部分将 mssql 容器链接到 web 容器:

services:
  web:
    links:
      - mssql:mssql

应该可以使用主机mssql 访问它,正如您在LocalConfiguration.php 中正确设置的那样。

我不会调用文件docker-compose.override.yaml。我称之为docker-compose.mssql.yaml。这样,您可以更轻松地添加多个“覆盖”docker-compose 文件,并在需要时轻松将它们复制到其他项目。将加载所有docker-compose.*.yaml 文件。

【讨论】:

  • 感谢文件命名提示。我将在我的项目文件中更改它。
  • @ChristianSonntag 你成功了吗?也尝试使用本地 mssql 但没有成功?
  • @hugronaphor 我添加了更多信息,请参阅更新 2。也许这会为您指明正确的方向。
  • 已经很接近了,但还有一些与 tls 相关的问题,通常无法进行身份验证,我现在放弃了
猜你喜欢
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 2012-06-07
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
相关资源
最近更新 更多