lit*_*ito 3 cors docker dockerfile docker-compose
我想在默认 PHP Docker 容器 ( https://hub.docker.com/_/php ) 上永久启用 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 });
});
}
Run Code Online (Sandbox Code Playgroud)
错误:
Access to XMLHttpRequest at 'http://127.0.0.1:8000/index.php/api' from origin 'http://127.0.0.1:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
您需要在镜像中的apache配置中添加相关标头。您还需要启用,mod_headers因为默认情况下您的映像中并未启用它。我使用了与php docker 映像文档中描述的类似技术(在页面上搜索“更改 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
Run Code Online (Sandbox Code Playgroud)
参考:
| 归档时间: |
|
| 查看次数: |
12045 次 |
| 最近记录: |