You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@mesos.apache.org by "Gilbert Song (JIRA)" <ji...@apache.org> on 2016/10/18 18:35:58 UTC

[jira] [Comment Edited] (MESOS-6010) Docker registry puller shows decode error "No response decoded".

    [ https://issues.apache.org/jira/browse/MESOS-6010?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15586271#comment-15586271 ] 

Gilbert Song edited comment on MESOS-6010 at 10/18/16 6:35 PM:
---------------------------------------------------------------

The root cause is that our 3rd party http_parser cannot handle the case that a http response does not contain any header and body. It would return `No response decoded`. 

Currently, we are using `curl` to pull docker images. When we firstly send a request to the registry server for manifest, we expect the http response like the following:
{noformat}
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
Docker-Distribution-Api-Version: registry/2.0
Www-Authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="repository:library/redis:pull"
Date: Tue, 09 Aug 2016 08:10:32 GMT
Content-Length: 145
Strict-Transport-Security: max-age=31536000

{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Name":"library/redis","Action":"pull"}]}]}
{noformat}

However, when the agent node is behind a proxy. The http response returned from curl may contain the proxy connect information as an extra http response (may or may not container headers/body). Then, the response may be as following:
{noformat}

{noformat}

It is problematic for the 3rd party http_parser (currently we are using http-parser-2.6.2) to parse a response without herders/body. We should either:
1. Fix the 3rd party http_parser library, or upgrade to a version contains the fix, or find another substitute library.
2. Introduce a workaround to skip the response from the proxy (e.g., config the curl using some flags to ignore the proxy response).

I would personally prefer (1), since we may have similar issues coming up in the future.


was (Author: gilbert):
The root cause is that our 3rd party http_parser cannot handle the case that a http response does not contain any header and body. It would return `No response decoded`. 

Currently, we are using `curl` to pull docker images. When we firstly send a request to the registry server for manifest, we expect the http response like the following:
{noformat}

{noformat}

However, when the agent node is behind a proxy. The http response returned from curl may contain the proxy connect information as an extra http response (may or may not container headers/body). Then, the response may be as following:
{noformat}

{noformat}

It is problematic for the 3rd party http_parser (currently we are using http-parser-2.6.2) to parse a response without herders/body. We should either:
1. Fix the 3rd party http_parser library, or upgrade to a version contains the fix, or find another substitute library.
2. Introduce a workaround to skip the response from the proxy (e.g., config the curl using some flags to ignore the proxy response).

I would personally prefer (1), since we may have similar issues coming up in the future.

> Docker registry puller shows decode error "No response decoded".
> ----------------------------------------------------------------
>
>                 Key: MESOS-6010
>                 URL: https://issues.apache.org/jira/browse/MESOS-6010
>             Project: Mesos
>          Issue Type: Bug
>          Components: containerization, docker
>    Affects Versions: 1.0.0, 1.0.1
>            Reporter: Sunzhe
>              Labels: Docker, mesos-containerizer
>
> The {{mesos-agent}} flags:
> {code}
>  GLOG_v=1 ./bin/mesos-agent.sh \
>               --master=zk://${MESOS_MASTER_IP}:2181/mesos  \
>               --ip=10.100.3.3  \
>               --work_dir=${MESOS_WORK_DIR} \
>               --isolation=cgroups/devices,gpu/nvidia,disk/du,docker/runtime,filesystem/linux \
>               --enforce_container_disk_quota \
>               --containerizers=mesos \
>               --image_providers=docker \
>               --executor_environment_variables="{}"
> {code}
> And the {{mesos-execute}} flags:
> {code}
>  ./src/mesos-execute \
>            --master=${MESOS_MASTER_IP}:5050 \
>            --name=${INSTANCE_NAME} \
>            --docker_image=${DOCKER_IMAGE} \
>            --framework_capabilities=GPU_RESOURCES \
>            --shell=false
> {code}
> But when {{./src/mesos-execute}}, the errors like below:
> {code}
> I0809 16:11:46.207875 25583 scheduler.cpp:172] Version: 1.0.0
> I0809 16:11:46.212442 25582 scheduler.cpp:461] New master detected at master@10.103.0.125:5050
> Subscribed with ID '168ab900-ee7e-4829-a59a-d16de956637e-0009'
> Submitted task 'test' to agent '168ab900-ee7e-4829-a59a-d16de956637e-S1'
> Received status update TASK_FAILED for task 'test'
>   message: 'Failed to launch container: Failed to decode HTTP responses: No response decoded
> HTTP/1.1 200 Connection established
> HTTP/1.1 401 Unauthorized
> Content-Type: application/json; charset=utf-8
> Docker-Distribution-Api-Version: registry/2.0
> Www-Authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="repository:library/redis:pull"
> Date: Tue, 09 Aug 2016 08:10:32 GMT
> Content-Length: 145
> Strict-Transport-Security: max-age=31536000
> {"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Name":"library/redis","Action":"pull"}]}]}
> ; Container destroyed while provisioning images'
>   source: SOURCE_AGENT
>   reason: REASON_CONTAINER_LAUNCH_FAILED
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)