martes, 15 de marzo de 2016

Docker: obtener los atributos con inspect

Se pueden conocer los detalles de un contenedor o imagen con el subcomando "inspect".

$ sudo docker run --name mimysql -p 13306:3306 \
            -e MYSQL_ROOT_PASSWORD=mi-secreto -d mysql

$ sudo docker inspect mimysql
[{
    "AppArmorProfile": "",
    "Args": [
        "mysqld"
    ],
    "Config": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [
            "mysqld"
        ],
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": [
            "/entrypoint.sh"
        ],
        "Env": [
            "MYSQL_ROOT_PASSWORD=mi-secreto",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "MYSQL_MAJOR=5.7",
            "MYSQL_VERSION=5.7.11-1debian8"
        ],
        "ExposedPorts": {
            "3306/tcp": {}
        },
        "Hostname": "a7ba98d86780",
        "Image": "mysql",
        "Labels": {},
        "MacAddress": "",
        "Memory": 0,
        "MemorySwap": 0,
        "NetworkDisabled": false,
        "OnBuild": null,
        "OpenStdin": false,
        "PortSpecs": null,
        "StdinOnce": false,
        "Tty": false,
        "User": "",
        "Volumes": {
            "/var/lib/mysql": {}
        },
        "WorkingDir": ""
    },
    "Created": "2016-03-15T14:02:35.975162208Z",
    "Driver": "aufs",
    "ExecDriver": "native-0.2",
    "ExecIDs": null,
    "HostConfig": {
        "Binds": null,
        "CapAdd": null,
        "CapDrop": null,
        "CgroupParent": "",
        "ContainerIDFile": "",
        "CpuShares": 0,
        "CpusetCpus": "",
        "Devices": [],
        "Dns": null,
        "DnsSearch": null,
        "ExtraHosts": null,
        "IpcMode": "",
        "Links": null,
        "LogConfig": {
            "Config": null,
            "Type": "json-file"
        },
        "LxcConf": [],
        "Memory": 0,
        "MemorySwap": 0,
        "NetworkMode": "bridge",
        "PidMode": "",
        "PortBindings": {
            "3306/tcp": [
                {
                    "HostIp": "",
                    "HostPort": "13306"
                }
            ]
        },
        "Privileged": false,
        "PublishAllPorts": false,
        "ReadonlyRootfs": false,
        "RestartPolicy": {
            "MaximumRetryCount": 0,
            "Name": "no"
        },
        "SecurityOpt": null,
        "Ulimits": null,
        "VolumesFrom": null
    },
    "HostnamePath": "/var/lib/docker/containers/a7ba98d867804d74a2a2f9b749bd796ed9e54127356aa9e78e9a7a17161c8ade/hostname",
    "HostsPath": "/var/lib/docker/containers/a7ba98d867804d74a2a2f9b749bd796ed9e54127356aa9e78e9a7a17161c8ade/hosts",
    "Id": "a7ba98d867804d74a2a2f9b749bd796ed9e54127356aa9e78e9a7a17161c8ade",
    "Image": "50806c71cd84eb5b3bc15060d3aa60c8963c7df6cc6ceff9a7cb5c27b62a01f4",
    "LogPath": "/var/lib/docker/containers/a7ba98d867804d74a2a2f9b749bd796ed9e54127356aa9e78e9a7a17161c8ade/a7ba98d867804d74a2a2f9b749bd796ed9e54127356aa9e78e9a7a17161c8ade-json.log",
    "MountLabel": "",
    "Name": "/mimysql",
    "NetworkSettings": {
        "Bridge": "docker0",
        "Gateway": "172.17.42.1",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "172.17.0.16",
        "IPPrefixLen": 16,
        "IPv6Gateway": "",
        "LinkLocalIPv6Address": "fe80::42:acff:fe11:10",
        "LinkLocalIPv6PrefixLen": 64,
        "MacAddress": "02:42:ac:11:00:10",
        "PortMapping": null,
        "Ports": {
            "3306/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "13306"
                }
            ]
        }
    },
    "Path": "/entrypoint.sh",
    "ProcessLabel": "",
    "ResolvConfPath": "/var/lib/docker/containers/a7ba98d867804d74a2a2f9b749bd796ed9e54127356aa9e78e9a7a17161c8ade/resolv.conf",
    "RestartCount": 0,
    "State": {
        "Dead": false,
        "Error": "",
        "ExitCode": 0,
        "FinishedAt": "0001-01-01T00:00:00Z",
        "OOMKilled": false,
        "Paused": false,
        "Pid": 19910,
        "Restarting": false,
        "Running": true,
        "StartedAt": "2016-03-15T14:02:36.105333233Z"
    },
    "Volumes": {
        "/var/lib/mysql": "/var/lib/docker/vfs/dir/842864eff1fdcb81c55f455925e72cbec425569585a99e60619178ed13e00ed9"
    },
    "VolumesRW": {
        "/var/lib/mysql": true
    }
}
]


Como se puede ver se trata de un JSON, lo cual lo convierte en muy apropiado para su tratamiento automatizado con paneles y scripts.

También se puede emplear para preguntar por atributos de la imagen. En el ejemplo "mysql" es la imagen. Si le preguntamos por los detalles nos ofrece los valores de fabricación de la misma.

$ docker inspect mysql


Si lo ejecutas verás que hay valores que no tienen sentido para una imagen pero si para el contenedor, como son los parámetros de red, configuración de host, etc..

Si solo estás interesado en un atributo en particular podemos preguntar por él directamente usando --format. En el siguiente ejemplo vamos a preguntar por el gateway del contenedor mimysql.

$ sudo docker inspect --format='{{.NetworkSettings.Gateway}}' mimysql
172.17.42.1


Un nuevo ejemplo pero ahora con 2 consultas simultáneas.
$ sudo docker inspect --format='{{.NetworkSettings.IPAddress}}, {{.NetworkSettings.Gateway}}' mimysql
172.17.0.16, 172.17.42.1


No hay comentarios: