##### SUMMARY
Hi,

When you want to pass an empty list or a null/None value to published_ports on docker_container it's actually impossible, so you get this error

```
File \"/tmp/ansible_docker_container_payload_ZOZc5l/__main__.py\", line 1448, in _parse_publish_ports\r\n  File \"/tmp/ansible_docker_container_payload_ZOZc5l/__main__.py\", line 1003, in parse_port_range\r\nValueError: invalid literal for int() with base 10: ''\r\n",
 ```

Ref #61602

The problem is that we parse via `_parse_publish_ports` the parameter if self.published_ports is not None or not 'all'
Also after that there is no control on each elements of the list, (not like for the volumes parameter by example)

So I propose to patch line 1151
`self.published_ports = self._parse_publish_ports() `
to
`self.published_ports = self._parse_publish_ports() if self.published_ports else None`

Best regards

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
* docker_container

##### ANSIBLE VERSION

```
ansible 2.8.4
```
description:
      - "Size of C(/dev/shm) (format: C(<number>[<unit>])). Number is positive integer.
        Unit can be C(B) (byte), C(K) (kibibyte, 1024B), C(M) (mebibyte), C(G) (gibibyte),
        C(T) (tebibyte), or C(P) (pebibyte)."
      - Omitting the unit defaults to bytes. If you omit the size entirely, the system uses C(64M).
    type: str
  security_opts:
    description:
      - List of security options in the form of C("label:user:User")
    type: list
  state:
    description:
      - 'I(absent) - A container matching the specified name will be stopped and removed. Use force_kill to kill the container
         rather than stopping it. Use keep_volumes to retain volumes associated with the removed container.'
      - 'I(present) - Asserts the existence of a container matching the name and any provided configuration parameters. If no
        container matches the name, a container will be created. If a container matches the name but the provided configuration
        does not match, the container will be updated, if it can be. If it cannot be updated, it will be removed and re-created
        with the requested config. Image version will be taken into account when comparing configuration. To ignore image
        version use the ignore_image option. Use the recreate option to force the re-creation of the matching container. Use
        force_kill to kill the container rather than stopping it. Use keep_volumes to retain volumes associated with a removed
        container.'
      - 'I(started) - Asserts there is a running container matching the name and any provided configuration. If no container
        matches the name, a container will be created and started. If a container matching the name is found but the
        configuration does not match, the container will be updated, if it can be. If it cannot be updated, it will be removed
        and a new container will be created with the requested configuration and started. Image version will be taken into
        account when comparing configuration. To ignore image version use the ignore_image option. Use recreate to always
        re-create a matching container, even if it is running. Use restart to force a matching container to be stopped and
        restarted. Use force_kill to kill a container rather than stopping it. Use keep_volumes to retain volumes associated
        with a removed container.'
      - 'I(stopped) - Asserts that the container is first I(present), and then if the container is running moves it to a stopped