提问者:小点点

Docker容器无法连接到主机数据库[重复]


我试图部署一个与主机数据库一起工作的Drupal6Docker容器(在将其部署到远程数据库之前出于测试目的),但它就是不想工作,尽管我找到了不同的建议。(特别是在这个来自Docker容器内部的问题中,我如何连接到机器的本地主机?当它谈到主机模式时,所以即使这个问题看起来很像,它也不觉得它是重复的)

DockerFile

FROM php:7.3-apache

COPY . /var/www/html

EXPOSE 80

RUN chmod o+w /var/www/html/sites/default/settings.php &&\
    chmod o+w /var/www/html/sites/default/files &&\
    apt-get update &&\
    apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev &&\
    docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ &&\
    docker-php-ext-install mysqli gd mbstring pdo pdo_mysql &&\
    docker-php-ext-enable mysqli

Docker-compose.yml

version: '3.8'

services:
    website:
        build: 
            context: ./drupal-6-lts
            network: host
        volumes:
            - ./drupal-6-lts:/var/www/html
        ports:
            - 8080:80

对于数据库连接,我指定了以下设置:

驱动程序:mysqli主机:127.0.0.1:8889(mysql端口为8889,我也尝试用localhost替换127.0.0.1),以及正确的用户名、密码和数据库名。

当我仅使用MAMP启动drupal安装时,drupal安装确实可以工作,但尽管docker-compose.yml中有network:host语句,但在容器中安装时,它似乎无法链接到db

当我尝试执行Trung Duc解决方案时,我在执行docker compose build时遇到以下错误:

services.network_mode必须是映射


共1个答案

匿名用户

不使用network:host,而是使用network_mode:host。此外,如果使用network_mode:host,则不需要添加ports:-8080:80

version: '3.8'

services:
    website:
        build: 
            context: ./drupal-6-lts
    volumes:
        - ./drupal-6-lts:/var/www/html
    network_mode: host