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