mesosphere / marathon

Deploy and manage containers (including Docker) on top of Apache Mesos at scale.
https://mesosphere.github.io/marathon/
Apache License 2.0
4.07k stars 845 forks source link

How to link docker containers through marathon?? #2439

Closed madhusudan-d closed 7 years ago

madhusudan-d commented 8 years ago

Through docker run command we can link two container by giving name. Is there any configuration (In json) for doing so in marathon?? ex: docker run -d --link 'name-of-container-to-lnked':'name' 'image' PS: other than mesos-dns.

aldipower commented 8 years ago

Hi @madhusudand .

Yes this should be possible. You can specify arbitrary Docker parameters as described at the bottom of this page: https://mesosphere.github.io/marathon/docs/native-docker.html

madhusudan-d commented 8 years ago

thanks @aldipower for the response. In my case configuration would be like "parameters": [ { "key": "link", "value": "CONTiANER NAME" } ]

But how can i get container name.The name gets assigned automatically by mesos. Is there any way that i can override it.

It would be better if you explain specifically with linking scenario.

aldipower commented 8 years ago

If I understood correctly you want to link against a container on a running slave?

From the mesos docs:

The Docker Containerizer launches all containers with the “mesos-” prefix plus the slave id (ie: mesos-slave1-abcdefghji), and also assumes all containers with the “mesos-” prefix is managed by the slave and is free to stop or kill the containers.

So the containername would be mesos-slavename-container-name. But I am not sure if it makes sense to link against single slaves in terms of reliability.

Could you explain your linking scenario a little bit more in detail? What do you want to achieve?

Thank you.

tony-kerz commented 8 years ago

i'm on the new side myself, but i think this kind of linking would require that the containers being linked reside on the same node.

i have had some success "linking" containers via a call out to the mesos-dns api in the entry point of the container wanting to do the "discovery". for instance, a web-app and it's database. the entrypoint script of the web-app could locate the database via mesos-dns and set some environment variables to connect the web-app to the database. granted this is not ideal, but it works.

there is also https://github.com/mesosphere/marathon/issues/2232 which touches on similar.

i'm visualizing something along the lines of docker-compose which can be applied to a marathon group.

giammbo commented 8 years ago

news on this? i need to link more container for deploy the developer branches, i have a web, mysql and elasticsearch container to link together.

akamalov commented 8 years ago

Tried with Marathon provided container name, but it did not work:

{
        "id": "/gitlab/gitlab",
        "container": {
                "type": "DOCKER",

                "docker": {
                        "image": "sameersbn/gitlab:8.5.4-1",
                        "network": "BRIDGE",
                        "portMappings": [{
                                "containerPort": 10080,
                                "hostPort": 10080,
                                "protocol": "tcp"
                        },{
                                "containerPort": 10022,
                                "hostPort": 10022,
                                "protocol": "tcp"

                        }],
                        "parameters": [{
                                "key": "env",
                                "value": "GITLAB_PORT=10080"
                        }, {
                                "key": "env",
                                "value": "GITLAB_SSH_PORT=10022"
                        }, {
                                "key": "link",
                                "value": "mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.9eaa61df-5d59-4180-9f5a-4d8923dc3e76:postgresql"
                        }, {
                                "key": "link",
                                "value": "mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.583e892e-01c8-4898-b03f-08a4bf7426d0:redisio"
                        }, {
                                "key": "publish",
                                "value": "10080:80"
                        }, {
                                "key": "publish",
                                "value": "10022:22"
                        }, {
                                "key": "env",
                                "value": "GITLAB_SECRETS_DB_KEY_BASE=86eafb1e193bab14fa05d9da"
                        }, {
                                "key": "volume-driver",
                                "value": "rexray"
                        }, {
                                "key": "volume",
                                "value": "gitdata:/home/git/data"

                        }]
                }
        },
        "instances": 1,
        "constraints": [
                ["hostname", "CLUSTER", "node264.localnet"]
        ],
        "cpus": 0.25,
        "mem": 256
}

I get streaming errors from a slave:

Mar  8 15:51:59 node264 docker: time="2016-03-08T15:51:59.797737471-05:00" level=error msg="Handler for GET /v1.22/containers/mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.b6b74cbd-2e06-4fca-9ab6-78dbab617aca/json returned error: No such container: mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.b6b74cbd-2e06-4fca-9ab6-78dbab617aca"
Mar  8 15:51:59 node264 docker: time="2016-03-08T15:51:59.804550849-05:00" level=error msg="Handler for GET /v1.22/images/mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.b6b74cbd-2e06-4fca-9ab6-78dbab617aca/json returned error: No such image: mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.b6b74cbd-2e06-4fca-9ab6-78dbab617aca"
Mar  8 15:51:59 node264 mesos-slave[1499]: W0308 15:51:59.816366  1739 slave.cpp:4629] Failed to get resource statistics for executor 'gitlab_gitlab.8248ae46-e56f-11e5-9c76-02429ce31955' of framework 7901cb4e-1e48-4a06-a85b-f340322ad02b-0000: Failed to 'docker -H unix:///var/run/docker.sock inspect mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.b6b74cbd-2e06-4fca-9ab6-78dbab617aca': exit status = exited with status 1 stderr = Error: No such image or container: mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.b6b74cbd-2e06-4fca-9ab6-78dbab617aca
Mar  8 15:52:02 node264 flanneld: I0308 15:52:02.131899 01595 vxlan.go:340] Ignoring not a miss: ea:c7:d4:a5:45:a8, 192.168.64.0
Mar  8 15:52:14 node264 mesos-slave[1499]: I0308 15:52:14.248411  1739 http.cpp:189] HTTP GET for /slave(1)/state.json from 192.168.19.4:49578 with User-Agent='Go-http-client/1.1'
Mar  8 15:52:14 node264 docker: time="2016-03-08T15:52:14.872720814-05:00" level=error msg="Handler for GET /v1.22/containers/mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.b6b74cbd-2e06-4fca-9ab6-78dbab617aca/json returned error: No such container: mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.b6b74cbd-2e06-4fca-9ab6-78dbab617aca"
Mar  8 15:52:14 node264 docker: time="2016-03-08T15:52:14.876342476-05:00" level=error msg="Handler for GET /v1.22/images/mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.b6b74cbd-2e06-4fca-9ab6-78dbab617aca/json returned error: No such image: mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.b6b74cbd-2e06-4fca-9ab6-78dbab617aca"
Mar  8 15:52:14 node264 mesos-slave[1499]: W0308 15:52:14.979513  1742 slave.cpp:4629] Failed to get resource statistics for executor 'gitlab_gitlab.8248ae46-e56f-11e5-9c76-02429ce31955' of framework 7901cb4e-1e48-4a06-a85b-f340322ad02b-0000: Failed to 'docker -H unix:///var/run/docker.sock inspect mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.b6b74cbd-2e06-4fca-9ab6-78dbab617aca': exit status = exited with status 1 stderr = Error: No such image or container: mesos-567979e6-1c9d-4147-8679-d2978f9333b1-S6.b6b74cbd-2e06-4fca-9ab6-78dbab617aca
Mar  8 15:52:19 node264 mesos-slave[1499]: I0308 15:52:19.624517  1742 slave.cpp:3987] Terminating executor ''gitlab_gitlab.8248ae46-e56f-11e5-9c76-02429ce31955' of framework 7901cb4e-1e48-4a06-a85b-f340322ad02b-0000' because it did not register within 1mins
Mar  8 15:52:19 node264 mesos-slave[1499]: I0308 15:52:19.627485  1742 docker.cpp:1385] Destroying container 'b6b74cbd-2e06-4fca-9ab6-78dbab617aca'
Mar  8 15:52:19 node264 mesos-slave[1499]: I0308 15:52:19.627944  1742 docker.cpp:1425] Destroying Container 'b6b74cbd-2e06-4fca-9ab6-78dbab617aca' in PULLING state
Mar  8 15:52:19 node264 mesos-slave[1499]: E0308 15:52:19.756479  1740 slave.cpp:3440] Container 'b6b74cbd-2e06-4fca-9ab6-78dbab617aca' for executor 'gitlab_gitlab.8248ae46-e56f-11e5-9c76-02429ce31955' of framework 7901cb4e-1e48-4a06-a85b-f340322ad02b-0000 failed to start:  future discarded
kgoedecke commented 8 years ago

Any news on this?

kopax commented 8 years ago

+1 for adding link with dynamic name

bastianb commented 8 years ago

+1

alfredcs commented 8 years ago

+1, and others including "name" and "net".

shashiranjan84 commented 8 years ago

+1

raveeolee commented 8 years ago

+1

fo2w commented 8 years ago

+1

parachvte commented 8 years ago

+1

suedady commented 8 years ago

+1

jasongilanfarr commented 8 years ago

Here's what I can say: normal apps will likely never get linking support without using something like mesos-dns or dcos and/or things like IP per container etc- remember, they are not guaranteed to be on the same host- so some kind of service discovery mechanism should be used instead.

However, we've been working on a pod feature that has all of the services in a shared CNI namespace on a single host. Perhaps that will meet some of the needs?