Pressionar para o registro local do docker dá erro de redefinição de conexão

1

Estou tentando criar um registro do Docker particular seguindo este guia . Eu baixei e marquei uma imagem do Ubuntu e criei um contêiner de registro e agora pretendo enviá-lo ao meu registro, mas quando eu chamo sudo docker push localhost:6000/Ubuntu , recebo a seguinte saída:

The push refers to a repository [localhost:6000/ubuntu] Put http://localhost:6000/v1/repositories/ubuntu/: http: can't write HTTP request on broken connection

Tudo o que consegui descobrir é que o erro "não é possível escrever solicitação HTTP" é um erro de Go, mas infelizmente não consegui encontrar nada relacionado a como posso resolvê-lo no Docker. Eu também tentei encontrar logs para os comandos do Docker para que eu possa tentar obter mais detalhes sobre o problema, mas parece que os logs estão disponíveis apenas para contêineres, e eu não estou executando isso em um contêiner.

Como posso resolver esse erro?

UPDATE

Acabei de executar o comando novamente depois de alterar nada e recebi um erro diferente:

Put http://localhost:6000/v1/repositories/ubuntu/: read tcp [::1]:33417->[::1]:6000: read: connection reset by peer

UPDATE2

E novamente, corri depois de mudar nada e agora estou recebendo:

Put http://localhost:6000/v1/repositories/ubuntu/: EOF

UPDATE3

Depois de mexer um pouco, descobri que a imagem que tentei enviar para o meu registro aparece na lista de imagens do Docker, mas parece que não consigo extraí-la.

UPDATE4

Depois de mexer um pouco mais, parece que a porta que eu atribuí ao meu registro privado está ouvindo apenas em IPV6, em vez de IPV4. De acordo com este git thread, é normal que o docker pareça estar apenas escutando no IPV6, mas depois de executar telnet localhost , netstat -ntlp e iptables -t nat -nxvL , ainda não vejo nenhuma indicação de que algo esteja escutando em 127.0.0.1:6000, que é a porta que meu registro (que está sendo executado apenas como um contêiner) deve ser atribuído a. Em vez disso, parece estar escutando ::: 1: 6000.

Além disso, porque foi solicitado e porque eu deveria listá-lo independentemente:

user@devstack01:~$ sudo docker version
Client:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   20f81dd
 Built:        Thu Mar 10 15:54:52 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   20f81dd
 Built:        Thu Mar 10 15:54:52 2016
 OS/Arch:      linux/amd64

UPDATE5

registros do contêiner de registro:

time="2016-04-04T18:34:22Z" level=warning msg="No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable." go.version=go1.5.3 instance.id=25b8dd5a-f154-455b-84ad-3dd61ccf04e0 version=v2.3.1
time="2016-04-04T18:34:22Z" level=info msg="redis not configured" go.version=go1.5.3 instance.id=25b8dd5a-f154-455b-84ad-3dd61ccf04e0 version=v2.3.1
time="2016-04-04T18:34:22Z" level=info msg="Starting upload purge in 58m0s" go.version=go1.5.3 instance.id=25b8dd5a-f154-455b-84ad-3dd61ccf04e0 version=v2.3.1
time="2016-04-04T18:34:22Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.5.3 instance.id=25b8dd5a-f154-455b-84ad-3dd61ccf04e0 version=v2.3.1
time="2016-04-04T18:34:22Z" level=info msg="listening on [::]:5000" go.version=go1.5.3 instance.id=25b8dd5a-f154-455b-84ad-3dd61ccf04e0 version=v2.3.1
time="2016-04-04T19:32:22Z" level=info msg="PurgeUploads starting: olderThan=2016-03-28 19:32:22.890256531 +0000 UTC, actuallyDelete=true"
time="2016-04-04T19:32:22Z" level=info msg="Purge uploads finished.  Num deleted=0, num errors=1"
time="2016-04-04T19:32:22Z" level=info msg="Starting upload purge in 24h0m0s" go.version=go1.5.3 instance.id=25b8dd5a-f154-455b-84ad-3dd61ccf04e0 version=v2.3.1
time="2016-04-05T13:54:59Z" level=warning msg="No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable." go.version=go1.5.3 instance.id=90882341-a150-4384-9434-b091aacdd68b version=v2.3.1
time="2016-04-05T13:54:59Z" level=info msg="redis not configured" go.version=go1.5.3 instance.id=90882341-a150-4384-9434-b091aacdd68b version=v2.3.1
time="2016-04-05T13:54:59Z" level=info msg="Starting upload purge in 59m0s" go.version=go1.5.3 instance.id=90882341-a150-4384-9434-b091aacdd68b version=v2.3.1
time="2016-04-05T13:54:59Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.5.3 instance.id=90882341-a150-4384-9434-b091aacdd68b version=v2.3.1
time="2016-04-05T13:54:59Z" level=info msg="listening on [::]:5000" go.version=go1.5.3 instance.id=90882341-a150-4384-9434-b091aacdd68b version=v2.3.1
time="2016-04-05T14:53:59Z" level=info msg="PurgeUploads starting: olderThan=2016-03-29 14:53:59.133142744 +0000 UTC, actuallyDelete=true"
time="2016-04-05T14:53:59Z" level=info msg="Purge uploads finished.  Num deleted=0, num errors=1"
time="2016-04-05T14:53:59Z" level=info msg="Starting upload purge in 24h0m0s" go.version=go1.5.3 instance.id=90882341-a150-4384-9434-b091aacdd68b version=v2.3.1

Registros de depuração do daemon do Docker quando tento enviar uma imagem para o meu registro:

DEBU[0037] Calling POST /v1.22/images/localhost:6000/hello-world/push
DEBU[0037] POST /v1.22/images/localhost:6000/hello-world/push?tag=
DEBU[0037] Trying to push localhost:6000/hello-world to https://localhost:6000 v2
DEBU[0037] Error getting v2 registry: Get https://localhost:6000/v2/: read tcp [::1]:33560->[::1]:6000: read: connection reset by peer
DEBU[0037] Trying to push localhost:6000/hello-world to http://localhost:6000 v2
DEBU[0037] Error getting v2 registry: Get http://localhost:6000/v2/: read tcp [::1]:33562->[::1]:6000: read: connection reset by peer
DEBU[0037] Trying to push localhost:6000/hello-world to https://localhost:6000 v1
DEBU[0037] attempting v2 ping for registry endpoint https://localhost:6000/v2/
DEBU[0037] attempting v1 ping for registry endpoint https://localhost:6000/v1/
DEBU[0037] Trying to push localhost:6000/hello-world to http://localhost:6000 v1
DEBU[0037] Image list: [0xc820aa3840 0xc820704500]
DEBU[0037] Tags by image: map[sha256:690ed74de00f99a7d00a98a5ad855ac4febd66412be132438f9b8dbd300a937d:[latest]]
DEBU[0037] Pushing ID: b652ec3a27e758f30de4742156b5d096bb19c82f2dc836e96e430323ba166ffe with Tag:
DEBU[0037] Pushing ID: 690ed74de00f99a7d00a98a5ad855ac4febd66412be132438f9b8dbd300a937d with Tag: latest
DEBU[0037] [registry] PUT http://localhost:6000/v1/repositories/hello-world/
DEBU[0037] Image list pushed to index:
[{"id":"b652ec3a27e758f30de4742156b5d096bb19c82f2dc836e96e430323ba166ffe"},{"id":"690ed74de00f99a7d00a98a5ad855ac4febd66412be132438f9b8dbd300a937d","Tag":"latest"}]
DEBU[0037] Not continuing with error: Put http://localhost:6000/v1/repositories/hello-world/: EOF

Os registros do registro terminam dizendo que ocorreu um erro, mas do resto do log eu não consigo discernir qual foi o erro. Eu até dividi o log em stdout e stderr e nada estava em stderr.

Além disso, confirmei que o registro está escutando no ipv4. Executando nc -l -4 6000 retornando Address already in use . Pelo menos, acho que confirmei. Os endereços ipv4 ainda não serão exibidos com netstat .

UPDATE6

Especificamente especificou uma porta ipv4 com docker run -d -p 127.0.0.1:8000:8000 , esta porta aparece como ouvindo no netstat. Ainda recebendo os mesmos erros. Os registros do Docker são um pouco diferentes:

time="2016-04-07T15:19:31Z" level=warning msg="No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable." go.version=go1.5.3 instance.id=6391e3dc-6644-4a45-8e8b-a08c8ff798a6 version=v2.3.1
time="2016-04-07T15:19:31Z" level=info msg="redis not configured" go.version=go1.5.3 instance.id=6391e3dc-6644-4a45-8e8b-a08c8ff798a6 version=v2.3.1
time="2016-04-07T15:19:31Z" level=info msg="Starting upload purge in 1m0s" go.version=go1.5.3 instance.id=6391e3dc-6644-4a45-8e8b-a08c8ff798a6 version=v2.3.1
time="2016-04-07T15:19:31Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.5.3 instance.id=6391e3dc-6644-4a45-8e8b-a08c8ff798a6 version=v2.3.1
time="2016-04-07T15:19:31Z" level=info msg="listening on [::]:5000" go.version=go1.5.3 instance.id=6391e3dc-6644-4a45-8e8b-a08c8ff798a6 version=v2.3.1
time="2016-04-07T15:20:31Z" level=info msg="PurgeUploads starting: olderThan=2016-03-31 15:20:31.061864096 +0000 UTC, actuallyDelete=true"
time="2016-04-07T15:20:31Z" level=info msg="Purge uploads finished.  Num deleted=0, num errors=1"
time="2016-04-07T15:20:31Z" level=info msg="Starting upload purge in 24h0m0s" go.version=go1.5.3 instance.id=6391e3dc-6644-4a45-8e8b-a08c8ff798a6 version=v2.3.1

A mensagem "redis not configured" é a única coisa que parece ser um problema. Indo para investigar isso. Realmente apreciaria qualquer percepção adicional.

    
por jackwise 04.04.2016 / 19:33

2 respostas

0

Resolvido o problema:

Teve que correr com docker run -d -p 127.0.0.1:6000:5000 . Não usar localhost garantiu que o ipv4 fosse usado (tenho certeza que foi usado de outra forma, mas pelo menos agora ele aparece no netstat) e os containers ouvem em sua porta 5000, então não funcionou de outra forma.

    
por 08.04.2016 / 19:23
1

Estou escrevendo isso porque passei horas nisto antes de finalmente quebrá-lo.

Minha situação: Estou executando uma versão 17 do Docker no Fedora 25 e estava tentando executar um registro usando um arquivo de configuração personalizado e obtendo a mesma mensagem de redefinição de ponto como acima. Parece que isso estava acontecendo devido à conexão HTTP insegura ser redefinida e, portanto, encontrei pessoas me dizendo para adicionar a opção DOCKER_OPTS="--insecure-registry localhost:6000 127.0.0.1:6000" no arquivo /etc/sysconfig/docker e /etc/default/docker e reiniciar o serviço docker. Isso não resolveu o problema, no entanto ( aqui é a documentação oficial sobre isso).

Finalmente, o truque foi executar um registro usando uma imagem de composição do docker. Eu segui os passos dados no guia digitalocean , que basicamente orienta você usando o docker-compose para configurar um registro e, em seguida, usar o nginx para configurar o SSL, o que funcionaria se fosse feito em seus servidores locais.

No entanto, tudo que eu precisava fazer era o Passo 2, isto é, configurar o docker-compose.yml como dado e iniciar um registro, e voila! o impulso agora funciona.

    
por 02.03.2017 / 18:18

Tags