不使用docker容器和php7.0-fpm

时间:2019-05-08 05:47:47

标签: docker docker-compose mariadb php-7

我目前正在尝试将主机的数据库与docker容器内的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. 验证主机数据库的绑定地址是否设置为0.0.0.0.0。该部分被认为会导致严重的安全问题,但我们由于急着进行操作而对其进行了设置。
  2. 已启用创建的'user'@'%'远程访问。
  3. 授予用户数据库权限。

但是,“连接超时”错误。 然后,我将日志级别设置为最大9,以开始检查所有日志。

那个时候,我看到了下面的日志。

  

2019-05-07 1:10:34 57 [警告]与数据库的连接57中止:'unconnected'用户:'unauthenticated'主机:'localhost'(CLOSE_CONNECTION)

我确实进行了谷歌搜索,发现您正在通过从mysql添加'-skip-name-reslove'解决此问题,但我无法解决问题。

我上载了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}'

在两个开发环境中都会出现相同的问题。 有什么问题吗?

0 个答案:

没有答案