Docker编写Apache尝试cURL子域

3htmauhk  于 2022-11-13  发布在  Docker
关注(0)|答案(1)|浏览(90)

我已经建立了一个docker-compose文件,它允许所有正在工作的项目在一个地方很容易地旋转起来,并一次性安装正确版本的PHP。只有一个apache容器包含所有的主机文件,并将它们与正确的php文件匹配。
我目前遇到的问题是,webapp正在尝试cURL的api,以获得数据,但每次它是说无法解析api.localhost,我想我可以让它与api.host.docker.internal或沿着这些线的东西,但我不能.

version: '3.4'
services:
  apache:
    build:
      context: './${DOCKER_FOLDER}/apache/'
    depends_on:
      - php70
      - php71
      - php72
      - php73
      - php74
      - php81
      - mariadb
    networks:
      - frontend
      - backend
    ports:
      - "80:80"
    volumes:
      - ./public_html/:/var/www/html/
  mariadb:
    build:
      context: ./${DOCKER_FOLDER}/mariadb
      args:
        - http_proxy
        - https_proxy
        - no_proxy
        - MARIADB_VERSION=${MARIADB_VERSION}
    volumes:
      - ${DATA_PATH_HOST}/mariadb:/var/lib/mysql
      - ${MARIADB_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
    ports:
      - "${MARIADB_PORT}:3306"
    environment:
      - TZ=${WORKSPACE_TIMEZONE}
      - MYSQL_DATABASE=${MARIADB_DATABASE}
      - MYSQL_USER=${MARIADB_USER}
      - MYSQL_PASSWORD=${MARIADB_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
    networks:
      - backend
  php70:
    build: './${DOCKER_FOLDER}/php/PHP7.0'
    networks:
      - backend
    volumes:
      - ./public_html/:/var/www/html/
  php71:
    build: './${DOCKER_FOLDER}/php/PHP7.1'
    networks:
      - backend
    volumes:
      - ./public_html/:/var/www/html/
  php72:
    build: './${DOCKER_FOLDER}/php/PHP7.2'
    networks:
      - backend
    volumes:
      - ./public_html/:/var/www/html/
  php73:
    build: './${DOCKER_FOLDER}/php/PHP7.3'
    networks:
      - backend
    volumes:
      - ./public_html/:/var/www/html/
  php74:
    build: './${DOCKER_FOLDER}/php/PHP7.4'
    networks:
      - backend
    volumes:
      - ./public_html/:/var/www/html/
  php81:
    build: './${DOCKER_FOLDER}/php/PHP8.1'
    networks:
      - backend
    volumes:
      - ./public_html/:/var/www/html/
networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge

Apache配置:

LoadModule deflate_module /usr/local/apache2/modules/mod_deflate.so
LoadModule proxy_module /usr/local/apache2/modules/mod_proxy.so
LoadModule proxy_fcgi_module /usr/local/apache2/modules/mod_proxy_fcgi.so
LoadModule rewrite_module /usr/local/apache2/modules/mod_rewrite.so

<VirtualHost *:80>
    # Proxy .php requests to port 9000 of the php-fpm container
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php70:9000/var/www/html/app/$1
    DocumentRoot /var/www/html/app/
    ServerName app.localhost
    <Directory /var/www/html/app/>
        DirectoryIndex index.php
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # Send apache logs to stdout and stderr
    CustomLog /proc/self/fd/1 common
    ErrorLog /proc/self/fd/2
</VirtualHost>
uurity8g

uurity8g1#

我已经设法做到这一点,通过添加extra_hosts到一个服务。例子基于你的代码如下。这确实需要你知道如何得到你的Docker主机IP,有人在那里的stackoverflow将涵盖得比我更好。
一旦你有了你的Docker主机IP,我建议你把它保存在一个.env文件中,然后在docker-compose.yml文件中引用它,因为这会随着时间的推移而改变。

php70:
build: './${DOCKER_FOLDER}/php/PHP7.0'
networks:
  - backend
volumes:
  - ./public_html/:/var/www/html/
extra_hosts:
  - 'app.localhost:${DOCKER_HOST_IP}'

相关问题