Docker PHP访问控制允许原始CORS

Docker PHP访问控制允许原始CORS,docker,docker-compose,cors,dockerfile,Docker,Docker Compose,Cors,Dockerfile,我想在默认的PHP Docker容器上永久启用CORS。docker-compose.yaml或docker-compose.yaml中的配置是什么 这是来自ReactJS和axios的请求 class App extends React.Component { ... getUsers() { axios.get(`http://127.0.0.1:8000/index.php/api`).then(res => { this.setState({ u

我想在默认的PHP Docker容器上永久启用CORS。docker-compose.yaml或docker-compose.yaml中的配置是什么

这是来自ReactJS和axios的请求

  class App extends React.Component {
    ... getUsers() {

    axios.get(`http://127.0.0.1:8000/index.php/api`).then(res => {

      this.setState({ users: res.data });

      console.log(state.users);

      // this.setState({ users });

    });

  }
错误: 访问位于“”的XMLHttpRequesthttp://127.0.0.1:8000/index.php/api“起源”http://127.0.0.1:8080'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'标头

docker-compose.yaml

version: '3.3'
services:
  web:
    build:
      context: ./php
      dockerfile: Dockerfile 
    container_name: php74
    depends_on: 
      - db
    volumes:
      - ./php:/var/www/html/
    ports: 
      - 8000:80
  db:
    container_name: mysql8
    image: mysql:latest
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test_db
      MYSQL_USER: devuser
      MYSQL_PASSWORD: devpass
    ports:
      - 3306:3306
Dockerfile:

FROM php:7.4-apache
RUN apt-get update && apt-get upgrade -y 
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
EXPOSE 80

您需要在映像中的apache配置中添加相关的头。您还需要启用mod_头,因为默认情况下它不会出现在您的图像中。我使用了与页面上搜索更改DocumentRoot或其他Apache配置中描述的技术类似的技术

这是一个可能的Dockerfile。我还添加了一些好的实践,以限制运行apt后层的大小

FROM php:7.4-apache

RUN apt-get update && apt-get upgrade -y \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli \
    && a2enmod headers
    && sed -ri -e 's/^([ \t]*)(<\/VirtualHost>)/\1\tHeader set Access-Control-Allow-Origin "*"\n\1\2/g' /etc/apache2/sites-available/*.conf

EXPOSE 80
参考资料:


您需要在映像中的apache配置中添加相关的头。您还需要启用mod_头,因为默认情况下它不会出现在您的图像中。我使用了与页面上搜索更改DocumentRoot或其他Apache配置中描述的技术类似的技术

这是一个可能的Dockerfile。我还添加了一些好的实践,以限制运行apt后层的大小

FROM php:7.4-apache

RUN apt-get update && apt-get upgrade -y \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli \
    && a2enmod headers
    && sed -ri -e 's/^([ \t]*)(<\/VirtualHost>)/\1\tHeader set Access-Control-Allow-Origin "*"\n\1\2/g' /etc/apache2/sites-available/*.conf

EXPOSE 80
参考资料:


感谢@Zeitounator的帮助,它正在工作

这是已安装但不需要的Dockerfile nano版本:

FROM php:7.4-apache
RUN apt-get update && apt-get upgrade -y && apt-get install -y nano
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli \
    && a2enmod headers \
    && sed -ri -e 's/^([ \t]*)(<\/VirtualHost>)/\1\tHeader set Access-Control-Allow-Origin "*"\n\1\2/g' /etc/apache2/sites-available/*.conf
ENV TERM xterm
EXPOSE 80

感谢@Zeitounator的帮助,它正在工作

这是已安装但不需要的Dockerfile nano版本:

FROM php:7.4-apache
RUN apt-get update && apt-get upgrade -y && apt-get install -y nano
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli \
    && a2enmod headers \
    && sed -ri -e 's/^([ \t]*)(<\/VirtualHost>)/\1\tHeader set Access-Control-Allow-Origin "*"\n\1\2/g' /etc/apache2/sites-available/*.conf
ENV TERM xterm
EXPOSE 80

尝试写入一个文件。htaccess Header set Access Control Allow Origin*@Aleksandr我在那里添加了这一行,但它给了我500个错误。然后,寻找一个真正的.htaccess。最后,它解决了。试着在一个文件中写入。htaccess Header set Access Control Allow Origin*@Aleksandr我在那里添加了这一行,但它给了我500个错误。然后,寻找一个真正的.htaccess。最后,它通过解决了。谢谢,我用docker rm php74删除了容器,并将该行添加到我的Dockerfile文件中。它还不起作用。您知道如何确保它正常工作吗?当我使用docker exec-it php74 bash进入docker时,是否应该在docker容器中可用的路径/etc/apache2/sites中的.config文件中找到Access Control Allow Origin?谢谢,我使用docker rm php74删除了容器,并将该行添加到我的文件docker文件中。它还不起作用。您知道如何确保它正常工作吗?当我使用docker exec-it php74 bash进入docker时,我是否应该在docker容器中可用的路径/etc/apache2/sites中的.config文件中找到Access Control Allow Origin?