```
        $args = [
            'version' => '2006-03-01',
            'region' => 'eu-west-1',
            'credentials' => CredentialsProvider::get(),
            'http' => ['decode_content' => false],
            'retries' => 6,
            'endpoint' => 'http://localstack:4572',
            'bucket_endpoint' => true
        ];

        $this->client = new S3Client($args);
        $result = $this->client->createBucket([
            'Bucket' => "localbucket",
        ]);
        $buckets = $this->client->listBuckets();
```

$result shows the `@metadata` statusCode as 200 however the returned Location which should tell me where the created bucket is, is an empty string. So it isn't creating the bucket, but I'm getting a 200 response. Just to be sure I run `listBuckets()` and it confirms nothing is being created.

docker-compose.yml settings for localstack:

```
    localstack:
        container_name: localstack
        image: localstack/localstack
        ports:
          - "4567-4593:4567-4593"
          - "${PORT_WEB_UI-8080}:${PORT_WEB_UI-8080}"
        environment:
          - HOSTNAME=pi.docker
          - SERVICES=s3,dynamodb
          - DEFAULT_REGION=eu-west-1
#            - DEBUG=${DEBUG- }
          - DATA_DIR=/tmp/localstack/data
          - PORT_WEB_UI=8080
#            - LAMBDA_EXECUTOR=local
          - DYNAMODB_ERROR_PROBABILITY=0.0
          - DOCKER_HOST=unix:///var/run/docker.sock
        volumes:
          - "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
          - "/var/run/docker.sock:/var/run/docker.sock"
```

Bonus issue: as far as I can tell persistence for s3 doesn't work, I've set DATA_DIR, I've tried changing the volume to `"localstack:/tmp/localstack"` and setting a persisting volume for that. And the directory does persist, however the s3 data isn't stored here so it's reset when taking down the container.
from botocore.client import ClientError
from requests.models import Response, Request
from localstack import config, constants
from localstack.config import HOSTNAME, HOSTNAME_EXTERNAL
from localstack.utils import persistence
from localstack.utils.aws import aws_stack
from localstack.utils.common import (
    short_uid, timestamp, TIMESTAMP_FORMAT_MILLIS, to_str, to_bytes, clone, md5, get_service_protocol)
from localstack.utils.analytics import event_publisher
from localstack.utils.aws.aws_responses import requests_response
from localstack.services.s3 import multipart_content
from localstack.services.generic_proxy import ProxyListener
S3_NOTIFICATIONS = {}
BUCKET_CORS = {}
BUCKET_LIFECYCLE = {}
LOGGER = logging.getLogger(__name__)
XMLNS_S3 = 'http://s3.amazonaws.com/doc/2006-03-01/'
BUCKET_NAME_REGEX = (r'(?=^.{3,63}$)(?!^(\d+\.)+\d+$)' +
    r'(^(([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])$)')
NOTIFICATION_DESTINATION_TYPES = ('Queue', 'Topic', 'CloudFunction', 'LambdaFunction')
OBJECT_METADATA_KEY_PREFIX = 'x-amz-meta-'
ALLOWED_HEADER_OVERRIDES = {
    'response-content-type': 'Content-Type',
    'response-content-language': 'Content-Language',
    'response-expires': 'Expires',
    'response-cache-control': 'Cache-Control',
    'response-content-disposition': 'Content-Disposition',
    'response-content-encoding': 'Content-Encoding',
}
def event_type_matches(events, action, api_method):