Не подключается к базе данных хоста с помощью Docker-контейнера с php7.0-fpm - PullRequest
1 голос
/ 08 мая 2019

В настоящее время я пытаюсь связать базу данных хоста с php-fpm внутри контейнера докера.

Однако я должен задать вам вопрос, потому что область не работает должным образом.

Я не использовал php официальное базовое изображение. Итак, я создал файл Docker, как показано ниже, и создал изображение.

RUN apt-get update --fix-missing && \ 
    apt-get -qq -y install aptitude software-properties-common 
RUN aptitude purge `dpkg -l | grep php| awk '{print $3}' |tr "\n" " "` 
RUN add-apt-repository ppa:ondrej/php
RUN apt-get update

# install php7 fpm
RUN apt-get -qq -y install build-essential wget && \
    apt-get -qq -y install php-pear \
        php7.0-fpm php7.0-cli php7.0-gd php7.0-curl php7.0-mbstring php7.0-xml php7.0-simplexml \ 
        php7.0-iconv php7.0-json php7.0-mcrypt libapache2-mod-php7.0 php7.0-mysql 

# clean up
RUN apt-get -qq -y --purge remove git subversion

# remove package
RUN apt-get -qq -y --purge remove build-essential wget && \
    apt-get -qq -y autoremove && \
    apt-get clean && \
    rm -rf /tmp/src 

# add config
ADD php.ini /etc/php/7.0/fpm/php.ini
ADD php-fpm.conf /etc/php/7.0/fpm/php-fpm.conf
ADD www.conf /etc/php/7.0/fpm/pool.d/www.conf

# log configure
RUN mkdir -p /var/log/php && \
    touch /var/log/php/fpm-php.www.log && \
    chown -R www-data:www-data /var/log/php/fpm-php.www.log
RUN ln -sf /dev/stderr /var/log/php/fpm-php.www.log 


# RUN
COPY entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh && \
    ln -s usr/local/bin/entrypoint.sh /entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
VOLUME /var/run/php

CMD ["/usr/sbin/php-fpm7.0", "-F"]

Первоначально я создавал образ веб-сайта с php5-fpm вместо php7-fpm, и с php5-fpm проблем с работой не было. Но была проблема, когда я загрузил его в версию 7.

Думая, что это может быть проблемой для базы данных, я начал проверять возможные проблемы с базой данных.

  1. Убедитесь, что для bind-адреса базы данных хоста установлено значение 0.0.0.0.0. Считается, что эта часть вызывает серьезные проблемы с безопасностью, но мы настроили ее, потому что спешим работать.
  2. Создан удаленный доступ 'user' @ '%'.
  3. Предоставление пользователю доступа к базе данных.

Однако произошла ошибка «Время ожидания истекло». Затем я установил максимум 9, чтобы начать проверку всех журналов.

В то время я видел бревно ниже.

2019-05-07 1:10:34 57 [Предупреждение] Прервано соединение 57 с базой данных: «неподключенный» пользователь: «не аутентифицирован» хост: «локальный хост» (CLOSE_CONNECTION)

Я сделал поиск в Google и обнаружил, что вы решили эту проблему, добавив '- skip-name-reslove' из mysql, но я не смог решить проблему.

Я загрузил исходный файл docker-compose на всякий случай.

version: '3'
services:
  nginx:
    build:
      context: ./nnet-nginx/
    restart: always
    image: seansin/nnet-nginx:latest
    depends_on:
      - app
    volumes:
      - app:/var/www/html/zbxe:rw
      - php:/var/run/php
      - log:/var/log/php
    network_mode: "bridge"
    ports:
      - 80:80
  app:
    build:
      context: ./nnet-app-php7/
    restart: always
    image: seansin/nnet-app-php7:latest
    environment:
      - XE_DBCONFIG_FILE=${XE_DBCONFIG_FILE}
      - DB_USER=${DB_USER}
      - DB_PORT=${DB_PORT}
      - DB_PASS=${DB_PASS}
      - DB_NAME=${DB_NAME}
    volumes:
      - app:/var/www/html/zbxe:rw
      - php:/var/run/php
      - log:/var/log/php 
volumes:
  app:
  php: 
  log:

Кроме того, моя среда разработки состоит из двух вещей.

  1. Windows 10 / MariaDB 10.3 (база данных хоста) / Docker-Engine 18.09.1 ​​
  2. MacOS Mojave / MariaDB 10.3 (база данных хоста) / Docker-Engine 18.09.1 ​​

Внутри Docker-контейнера вы пытаетесь подключиться по адресу 'host.docker.internal'.

Linux использует команду '/ sbin / ip route | awk' / default / {print $ 3} '

Одна и та же проблема возникает в обеих средах разработки. В чем проблема?

...