# module docker : dynamic port binding problem

**URL:** <https://forum.ansible.com/t/module-docker-dynamic-port-binding-problem/17348>\
**Category:** Ansible Project\
**Created:** [January 22, 2015, 8:19am UTC](https://forum.ansible.com/t/module-docker-dynamic-port-binding-problem/17348 "2015-01-22T08:19:10Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Herve\_Leclerc1](https://avatars.discourse-cdn.com/v4/letter/h/b4bc9f/32.png) [@Herve\_Leclerc1](https://forum.ansible.com/u/Herve_Leclerc1)\
**Post date:** [January 22, 2015, 8:19am UTC](https://forum.ansible.com/t/module-docker-dynamic-port-binding-problem/17348/1 "2015-01-22T08:19:10Z")

</div>

Hello

Ansible 1.9 - docker-py 0.71 - docker version 1.4.1

I’m trying to do in a playbook this docker command line

docker run --name projetx -d -v /Users/hleclerc/tmp/data/projetx/mysql:/var/lib/mysql **-p :3306** -e MYSQL\_ROOT\_PASSWORD=pwd projetx/mysql

docker ps :

`4876cb21a372 projetx/mysql:latest "/usr/local/bin/run" 4 seconds ago Up 3 seconds 0.0.0.0:49193->3306/tcp projetx`  
A dynamic port is allocated

Here is the playbooks :

1:

`

- name: Starting MySQL container  
docker:  
detach: true  
image: “projetx/mysql”  
name: “projetx”  
ports: “::3306”  
env: “MYSQL\_ROOT\_PASSWORD=pwd”  
volumes:
- “/Users/hleclerc/tmp/data/projetx/mysql:/var/lib/mysql”

`

With this syntax if i do a docker ps :

`f84b89180678 projetx/mysql:latest "/usr/local/bin/run" About a minute ago Up About a minute 3306/tcp`

if i change ports with

ports: 3306

a docker ps will display

`6cb9843603f7 projetx/mysql:latest "/usr/local/bin/run" 8 seconds ago Up 7 seconds 0.0.0.0:0->3306/tcp`

if i change ports with ‘:3306’ i get this error from ansible

bind = (‘0.0.0.0’, int(parts[0]))

ValueError: invalid literal for int() with base 10: ‘’

How can i have a correct behaviour ?

in advance thanks

---

<div class="post-metadata">

**Author:** ![Brian\_Coca](https://avatars.discourse-cdn.com/v4/letter/b/6de8d8/32.png) [@Brian\_Coca](https://forum.ansible.com/u/Brian_Coca)\
**Post date:** [January 22, 2015, 3:56pm UTC](https://forum.ansible.com/t/module-docker-dynamic-port-binding-problem/17348/2 "2015-01-22T15:56:28Z")

</div>

remove the colon's from the port setting

ports: 3306

---

<div class="post-metadata">

**Author:** ![Herve\_Leclerc1](https://avatars.discourse-cdn.com/v4/letter/h/b4bc9f/32.png) [@Herve\_Leclerc1](https://forum.ansible.com/u/Herve_Leclerc1)\
**Post date:** [January 23, 2015, 7:16am UTC](https://forum.ansible.com/t/module-docker-dynamic-port-binding-problem/17348/3 "2015-01-23T07:16:38Z")

</div>

Hello

If i do it i’ve this

ports: 3306

a docker ps display

`6cb9843603f7 projetx/mysql:latest "/usr/local/bin/run" 8 seconds ago Up 7 seconds 0.0.0.0:0->3306/tcp`

This not good i should have 0.0.0.0: **someDynamicPort** -\>3306 and not 0

---

<div class="post-metadata">

**Author:** ![Herve\_Leclerc1](https://avatars.discourse-cdn.com/v4/letter/h/b4bc9f/32.png) [@Herve\_Leclerc1](https://forum.ansible.com/u/Herve_Leclerc1)\
**Post date:** [January 24, 2015, 2:15pm UTC](https://forum.ansible.com/t/module-docker-dynamic-port-binding-problem/17348/4 "2015-01-24T14:15:21Z")

</div>

For information with docker-py :

`

from docker.client import Client  
from docker.utils import kwargs\_from\_env  
kwargs = kwargs\_from\_env()  
kwargs[‘tls’].assert\_hostname = False  
client = Client(\*\*kwargs)  
container\_id = client.create\_container(image=“busybox”, ports=[3306] , command=“sleep 30000000”)  
client.start(container\_id, port\_bindings={3306: (‘127.0.0.1’,{})})

`

give me a correct behaviour

`CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 513db4e06837 busybox:latest "sleep 30000000" 3 seconds ago Up 3 seconds 127.0.0.1:49154->3306/tcp sad_mclean`

The problem is somewhere in docker module / parse

---

<div class="post-metadata">

**Author:** ![Herve\_Leclerc1](https://avatars.discourse-cdn.com/v4/letter/h/b4bc9f/32.png) [@Herve\_Leclerc1](https://forum.ansible.com/u/Herve_Leclerc1)\
**Post date:** [January 24, 2015, 6:12pm UTC](https://forum.ansible.com/t/module-docker-dynamic-port-binding-problem/17348/5 "2015-01-24T18:12:24Z")

</div>

Finally i make it works you need both expose and ports parameters

`

- name: Starting MySQL container  
docker:  
detach: true  
**expose** \*\*: 3306\*\*  
publish\_all\_ports: true  
image: “projetx/mysql”  
name: “projetx”  
**ports** \*\*: 3306\*\*  
debug: true  
env: “MYSQL\_ROOT\_PASSWORD=password”  
volumes:
- “/Users/hleclerc/tmp/data/projetx/mysql:/var/lib/mysql”  
docker\_url: “[http://192.168.59.103:2375](http://192.168.59.103:2375)”  
state: present  
register: out  
`

`f5d49bd72ac0 projetx/mysql:latest "/usr/local/bin/run" 3 minutes agoUp 3 minutes **0.0.0.0:49155->3306** /tcp projetx`

ttms
