<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY
<!--- Explain the problem briefly below -->

A docker container cannot be started with ip-bound port mappings when using both, ipv4 and ipv6 addresses:

With #46596, i expected 

    docker_container:
      name: "test123"
      image: "ubuntu:latest"
      tty: yes
      interactive: yes
      networks:
      - name: bridge
      purge_networks: yes
      pull: yes
      ports:
      - "127.0.0.1:53:53/tcp"
      - "127.0.0.1:53:53/udp"
      - "[::1]:53:53/tcp"
      - "[::1]:53:53/udp"

to behave like 

    docker run --rm -ti -p "127.0.0.1:53:53/tcp" -p "127.0.0.1:53:53/udp" -p "[::1]:53:53/tcp" -p "[::1]:53:53/udp" ubuntu:latest

    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                                                        NAMES
    3e7204cabfeb        ubuntu:latest       "/bin/bash"         2 seconds ago       Up 1 second         127.0.0.1:53->53/tcp, 127.0.0.1:53->53/udp, ::1:53->53/tcp, ::1:53->53/udp   awesome_banach

However, the deployment fails with 

    fatal: [localhost]: FAILED! => {"changed": false, "msg": "Error starting container a26b2b9b2497195af25770878fd2c084e984e3d2c70bef602261cf76aad1a0bb: 500 Server Error: Internal Server Error (\"driver failed programming external connectivity on endpoint test123 (c41303e4e84c59d838166594918137135dfbd22e0bce311e3302f88135874d87): Error starting userland proxy: listen tcp 0.0.0.0:53: bind: address already in use\")"}

Note that is says `0.0.0.0:53`, which may be related to #40258. Removing the two IPv6 mappings works as expected.

From what i can see, the mapping is correctly parsed in 
`ansible.modules.cloud.docker.docker_container.TaskParameters._parse_publish_ports` - i suspect the error is in the passing to the docker-py module.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
docker_container

##### ANSIBLE VERSION
```
ansible 2.8.3
  config file = /home/johann/.ansible.cfg
  configured module search path = ['/home/johann/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.7/dist-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.7.3 (default, Apr  3 2019, 05:39:12) [GCC 8.3.0]
```

##### CONFIGURATION
```
ANSIBLE_SSH_ARGS(/home/johann/.ansible.cfg) = -o ControlMaster=auto -o ControlPersist=60s -o ForwardAgent=yes -o ControlPath="/home/johann/.ansible/ansible-ssh-%h-%p-%r"
DEFAULT_HOST_LIST(/home/johann/.ansible.cfg) = ['/home/johann/dev/repos/ercpe-ansible/hosts']
DEFAULT_TRANSPORT(/home/johann/.ansible.cfg) = ssh
DEFAULT_VAULT_PASSWORD_FILE(/home/johann/.ansible.cfg) = /home/johann/bin/ansible-vault-pass
```

##### OS / ENVIRONMENT
Tested on Ubuntu 19.04 (disco)

##### STEPS TO REPRODUCE
See Summary

##### EXPECTED RESULTS
See Summary

##### ACTUAL RESULTS
See Summary

type: str
    version_added: "2.8"
  shm_size:
    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