php - PHP使用MailHog从Docker容器发送邮件

标签 php docker prestashop-1.6

我想将其用于Prestahop的本地开发。对于测试电子邮件,我想使用MailHog容器。在prestahop容器中使用docker php镜像。我尝试在prestashop容器中安装sendmail,但看起来docker-compose up后未安装sendmail

我的 docker 组成

version: '2'

services: 
  prestashop:
    build: ./docker/prestashop
    ports:
      - 80:80
    links:
      - mariadb:mariadb
    depends_on:
      - mariadb
    volumes:
      - ./docker/common:/scripts
      - ./src:/var/www/html
      - ./src/modules:/var/www/html/modules
      - ./src/themes:/var/www/html/themes
      - ./src/override:/var/www/html/override
    environment:
      - PS_DEV_MODE=1
      - DB_SERVER=mariadb
      - DB_USER=root
      - DB_PASSWD=root
      - DB_NAME=prestashop
      - PS_INSTALL_AUTO=0

  mariadb:
    build: ./docker/mariadb
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=prestashop
    volumes:
      - ./data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links:
      - mariadb
    ports: 
      - 81:80 
    environment:
      - PMA_HOST=mariadb
      - PMA_USER=root
      - PMA_PASSWORD=root
  mailhog:
    container_name: mailhog
    image: mailhog/mailhog
    restart: always
    ports:
      - 1025:1025
      - 8025:8025

Dockerfile看起来像
FROM prestashop/prestashop:latest

RUN yes | pecl install xdebug-2.5.5 \
    && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_connect_back=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_port=9000" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "file_uploads=On" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "memory_limit=128M" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "upload_max_filesize=64M" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "post_max_size=64M" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "max_execution_time=600" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "max_input_vars=10000" >> /usr/local/etc/php/conf.d/custom.ini \
    && echo "error_reporting-1" >> /usr/local/etc/php/conf.d/custom.ini \
    && echo "display_errors = On" >> /usr/local/etc/php/conf.d/custom.ini \
    && echo "sendmail_path = sendmail -S mailhog:1025" >> /usr/local/etc/php/php.ini

RUN apt-get install - y sendmail

RUN usermod -u 1000 www-data
RUN chown 1000 /var/www -R

此Docker容器的正确配置是什么?

最佳答案

我用这个解决了这个配置:

Dockerfile:

FROM prestashop/prestashop:1.6.1.16

RUN apt-get update && apt-get install -q -y ssmtp mailutils && rm -rf /var/lib/apt/lists/*

RUN echo "hostname=localhost.localdomain" > /etc/ssmtp/ssmtp.conf
RUN echo "root=root@presta.com" >> /etc/ssmtp/ssmtp.conf
RUN echo "mailhub=mailhog:1025" >> /etc/ssmtp/ssmtp.conf

RUN yes | pecl install xdebug-2.5.5 \
    && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_connect_back=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_port=9000" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "file_uploads=On" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "memory_limit=128M" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "upload_max_filesize=64M" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "post_max_size=64M" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "max_execution_time=600" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "max_input_vars=10000" >> /usr/local/etc/php/conf.d/custom.ini \
    && echo "error_reporting-1" >> /usr/local/etc/php/conf.d/custom.ini \
    && echo "display_errors = On" >> /usr/local/etc/php/conf.d/custom.ini \
    && echo "sendmail_path=/usr/sbin/ssmtp -t" >> /usr/local/etc/php/conf.d/php-sendmail.ini

RUN echo "localhost localhost.localdomain" >> /etc/hosts

RUN usermod -u 1000 www-data
RUN chown 1000 /var/www -R

docker-compose.yml
version: '3'

services:
  mysql:
    image: mysql:5.7
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=prestashop
    volumes:
      - ./data:/var/lib/mysql

  adminer:
    image: adminer
    restart: always
    ports: 
      - 81:8080 

  prestashop:
    container_name: prestashop
    build: ./docker/prestashop
    ports:
      - 8080:80
    links:
      - mysql
    depends_on:
      - mysql
    volumes:
      - ./:/var/www/html
    environment:
      - PS_DEV_MODE=1
      - DB_SERVER=mysql
      - DB_USER=root
      - DB_PASSWD=root
      - DB_NAME=prestashop
      - PS_INSTALL_AUTO=

  mailhog:
    container_name: mailhog
    image: mailhog/mailhog
    restart: always
    ports:
      - 1025:1025
      - 8025:8025

关于php - PHP使用MailHog从Docker容器发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51028436/

相关文章:

php - 如何使用 PHP 显示来自 mysql 行的代码块?

php - Magento:在每个类别的基础上通过 "Custom Layout Updates"XML 设置变量?

docker - 在 docker 数据容器与卷中部署 Web 应用程序

php - 在注册表中显示自定义字段 Prestashop 1.6.x

php - 在 PrestaShop 中创建新模块时,如何在不使用 mysql_connect 的情况下连接到数据库

javascript - 用于设置 SESSION 值的切换按钮

php - 如何从 laravel 的存储中删除图像?

Windows Docker 桌面 Linux 模式 - docker 容器时间偏差

wordpress - 具有自定义 php.ini 文件设置的 Docker Wordpress 容器

prestashop - 在 Prestashop 中创建主页分页