### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

No matter what I do I cannot seem to connect to LocalStack v2.x inside of a GitLab container.

Locally, this works `http://s3.localhost.localstack.cloud:4566` using the same container without having to set path style.

In GitLab,

This works using v1.4 (for whatever reason this only worked when I set the path style)

```yaml
  services:
    - name: localstack/localstack:1.4
      alias: localstack
  variables:
    AWS_ACCESS_KEY_ID: test
    AWS_DEFAULT_REGION: us-east-1
    AWS_SECRET_ACCESS_KEY: test
    DEBUG: 1
    FORCE_NONINTERACTIVE: "true"
    LOCALSTACK_HOST: localstack
    SERVICES: s3
    S3_ENDPOINT_OVERRIDE: http://localstack:4566
    S3_PATH_STYLE_ACCESS: "true"
```

Now, it either cannot context or gives a "length" issue when trying to create a bucket.

```yaml
  services:
    - name: localstack/localstack #:1.4
      alias: localstack
  variables:
    AWS_ACCESS_KEY_ID: test
    AWS_DEFAULT_REGION: us-east-1
    AWS_SECRET_ACCESS_KEY: test
    DEBUG: 1
    FORCE_NONINTERACTIVE: "true"
    LOCALSTACK_HOST: localstack
    SERVICES: s3
    SKIP_E2E_TESTS: "false"
    S3_ENDPOINT_OVERRIDE: http://s3.localstack.localstack.cloud:4566
    S3_PATH_STYLE_ACCESS: "false"
```


### Expected Behavior

Access to S3 using v2 works the same, or with minor changes, since it worked with v1.4.

### How are you starting LocalStack?

Custom (please describe below)

### Steps To Reproduce

Running localstack as a GitLab service inside of a runner that does not have increased docker privileges.

### Environment

```markdown
- LocalStack: v2.0
```


### Anything else?

I've tried everything I can think of, assumingit is the URL endpoint (we had to make that change locally earlier), but no luck.
"""
        Moto tries to parse the TagSet and then iterate of it, not checking if it returned something
        Potential to be an easy upstream fix
        """
        try:
            tags: Dict[str, str] = fn(*args, **kwargs)
        except TypeError:
            tags = {}
        return tags
    @patch(moto_s3_responses.S3Response._cors_from_body)
    def _fix_parsing_cors_rules(fn, *args, **kwargs) -> List[Dict]:
        """
        Fix parsing of CORS Rules from moto, you can set empty origin in AWS. Replace None by an empty string
        """
        cors_rules = fn(*args, **kwargs)
        for rule in cors_rules:
            if rule["AllowedOrigin"] is None:
                rule["AllowedOrigin"] = ""
        return cors_rules
    @patch(moto_s3_responses.S3Response.is_delete_keys)
    def s3_response_is_delete_keys(fn, self):
        """
        Old provider had a fix for a ticket, concerning 'x-id' - there is no documentation on AWS about this, but it is probably still valid
        original comment: Temporary fix until moto supports x-id and DeleteObjects (#3931)
        """
        return get_safe(self.querystring, "$.x-id.0") == "DeleteObjects" or fn(self)
    @patch(moto_s3_responses.S3ResponseInstance.parse_bucket_name_from_url, pass_target=False)
    def parse_bucket_name_from_url(self, request, url):