localstack s3可以';无法从php访问
我试图在docker容器中使用localstack。我为s3创建了演示桶。我可以查看从终端上传的文件,但无法从代码访问s3。我哪里出错了?我在下面分享我的代码。谢谢我的yml文件如下所示:localstack s3可以';无法从php访问,php,docker,amazon-s3,docker-compose,localstack,Php,Docker,Amazon S3,Docker Compose,Localstack,我试图在docker容器中使用localstack。我为s3创建了演示桶。我可以查看从终端上传的文件,但无法从代码访问s3。我哪里出错了?我在下面分享我的代码。谢谢我的yml文件如下所示: version: "3.7" services: php: image: php:7.4-fpm volumes: - ~/image.minyay.com/src:/var/www/html - ~/image.minyay.com/docker/php.i
version: "3.7"
services:
php:
image: php:7.4-fpm
volumes:
- ~/image.minyay.com/src:/var/www/html
- ~/image.minyay.com/docker/php.ini:/usr/local/etc/php/php.ini
web:
image: nginx:1.17
ports:
- 80:80
volumes:
- ~/image.minyay.com/src:/var/www/html
- ~/image.minyay.com/docker/site.conf:/etc/nginx/conf.d/site.conf
depends_on:
- php
localstack:
image: localstack/localstack:0.11.0
container_name: localstack
ports:
- "4563-4599:4563-4599"
- '8055:8080'
environment:
- SERVICES=s3
- DOCKER_HOST=unix:///var/run/docker.sock
- DATA_DIR=/tmp/localstack/data
volumes:
- /tmp/localstack:/tmp/localstack
- /var/run/docker.sock:/var/run/docker.sock
- ./aws:/docker-entrypoint-initaws.d
public function get_big_folder_in_s3($file_path){
try {
$pages = $this->s3->getPaginator('ListObjects', [
'Bucket' => $this->bucket,
'Prefix' => $file_path, //DESTINATION
]);
foreach ($pages as $page) {
foreach ($page['Contents'] as $object) {
// echo $object['Key'] . PHP_EOL;
$result[] = $object['Key'];
}
}
return $result;
} catch (S3Exception $e) {
return false;
}
}
我的php代码如下所示:
version: "3.7"
services:
php:
image: php:7.4-fpm
volumes:
- ~/image.minyay.com/src:/var/www/html
- ~/image.minyay.com/docker/php.ini:/usr/local/etc/php/php.ini
web:
image: nginx:1.17
ports:
- 80:80
volumes:
- ~/image.minyay.com/src:/var/www/html
- ~/image.minyay.com/docker/site.conf:/etc/nginx/conf.d/site.conf
depends_on:
- php
localstack:
image: localstack/localstack:0.11.0
container_name: localstack
ports:
- "4563-4599:4563-4599"
- '8055:8080'
environment:
- SERVICES=s3
- DOCKER_HOST=unix:///var/run/docker.sock
- DATA_DIR=/tmp/localstack/data
volumes:
- /tmp/localstack:/tmp/localstack
- /var/run/docker.sock:/var/run/docker.sock
- ./aws:/docker-entrypoint-initaws.d
public function get_big_folder_in_s3($file_path){
try {
$pages = $this->s3->getPaginator('ListObjects', [
'Bucket' => $this->bucket,
'Prefix' => $file_path, //DESTINATION
]);
foreach ($pages as $page) {
foreach ($page['Contents'] as $object) {
// echo $object['Key'] . PHP_EOL;
$result[] = $object['Key'];
}
}
return $result;
} catch (S3Exception $e) {
return false;
}
}
我的s3客户端创建:
$this->s3 = S3Client::factory([
'credentials' => false,
'version' => 'latest',
'region' => 'eu-central-1',
'endpoint' => 'http://localhost:4572',
'force_path_style' => true,
]);
您没有共享客户端初始化,但localstack通常需要传递一个端点,因此我想在PHP中,它应该类似于:
$s3 = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'us-west-2',
'endpoint' => 'http://localstack:4566',
]);
您没有共享客户端初始化,但localstack通常需要传递一个端点,因此我想在PHP中,它应该类似于:
$s3 = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'us-west-2',
'endpoint' => 'http://localstack:4566',
]);
你能分享你的s3客户端创建吗?你能分享你的s3客户端创建吗?非常感谢你的警告。我想我不能正确地问这个问题,因为我是这个平台的新手。在您发出警告后,我更新了我的问题。@Erenözdemir,如果您的PHP代码在PHP容器中运行,
endpoint
的主机名应该是localstack
,而不是localhost
,但我创建的bucket是这样的:aws--endpoint url=s3 mb s3://demo bucket,如果我尝试使用aws--endpoint url=s3 mb s3://demo bucket,则会给出一个错误:无法连接到端点url:“您是从localhost创建bucket的吗?”?(您是从本地主机还是在某个容器中运行的?)。假设您是从本地计算机创建的,那就好了。从本地计算机运行时,请使用localhost
。当你在一个容器中运行东西时-使用localstack
-两者都使用同一个组件,它只是一个不同的名称你好,再次感谢你的关注,我照你说的做了,但我仍然无法得到任何结果。我创建了一个github repos,以便更准确地与您沟通。如果您能查看我的代码并告诉我哪里出了问题,我将不胜感激。我在终端中遵循的步骤如下。1-Docker-compose up 2-aws--endpoint url=http://localhost:4572 s3 mb s3://demo bucket 3-aws--endpoint url=http://localhost:4572 s3 cp~/example.jpg s3://demo bucket我的项目链接:https://github.com/erenozdmr/localstacktry再次感谢您。非常感谢您的警告。我想我不能正确地问这个问题,因为我是这个平台的新手。在您发出警告后,我更新了我的问题。@Erenözdemir,如果您的PHP代码在PHP容器中运行,endpoint
的主机名应该是localstack
,而不是localhost
,但我创建的bucket是这样的:aws--endpoint url=s3 mb s3://demo bucket,如果我尝试使用aws--endpoint url=s3 mb s3://demo bucket,则会给出一个错误:无法连接到端点url:“您是从localhost创建bucket的吗?”?(您是从本地主机还是在某个容器中运行的?)。假设您是从本地计算机创建的,那就好了。从本地计算机运行时,请使用localhost
。当你在一个容器中运行东西时-使用localstack
-两者都使用同一个组件,它只是一个不同的名称你好,再次感谢你的关注,我照你说的做了,但我仍然无法得到任何结果。我创建了一个github repos,以便更准确地与您沟通。如果您能查看我的代码并告诉我哪里出了问题,我将不胜感激。我在终端中遵循的步骤如下。1-Docker-compose up 2-aws--endpoint url=http://localhost:4572 s3 mb s3://demo bucket 3-aws--endpoint url=http://localhost:4572 s3 cp~/example.jpg s3://demo bucket我的项目链接:https://github.com/erenozdmr/localstacktry再次感谢您。