Mendorong ke registri docker lokal memberikan kesalahan reset koneksi

Saya mencoba membuat registri Docker pribadi dengan mengikuti panduan ini. Saya telah mengunduh dan menandai gambar Ubuntu dan membuat wadah registri dan sekarang saya bermaksud untuk mendorongnya ke registri saya, tetapi ketika saya menelepon sudo docker push localhost:6000/Ubuntu Saya mendapatkan output berikut:

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

Yang dapat saya temukan adalah bahwa kesalahan "tidak dapat menulis permintaan HTTP" adalah kesalahan Go, tetapi sayangnya saya belum dapat menemukan apa pun yang terkait dengan bagaimana saya dapat menyelesaikannya di Docker. Saya juga mencoba menemukan log untuk perintah buruh pelabuhan sehingga saya dapat mencoba mendapatkan lebih banyak detail tentang masalah ini, tetapi sepertinya log hanya tersedia untuk wadah, dan saya tidak menjalankan ini di wadah.

Bagaimana Saya bisa menyelesaikan kesalahan ini?

Pembaruan

Saya baru saja menjalankan perintah lagi setelah tidak mengubah apa pun dan mendapat kesalahan yang berbeda:

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

PEMBARUAN2

Dan lagi, berlari setelah mengubah apa-apa Dan sekarang mendapatkan:

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

PEMBARUAN3

Setelah bermain-main sedikit, saya menemukan bahwa gambar yang saya coba dorong ke registri saya memang muncul di daftar gambar buruh pelabuhan saya, tetapi sepertinya saya tidak dapat menariknya.

PEMBARUAN4

Setelah bermain-main sedikit lagi, sepertinya port yang saya tetapkan ke registri pribadi saya hanya mendengarkan di IPV6, bukan IPV4. Menurut ini git thread, adalah normal bagi docker untuk tampak seperti hanya mendengarkan di IPV6, tetapi setelah dijalankan telnet localhost, netstat -ntlp, dan iptables -t nat -nxvL, Saya masih tidak melihat indikasi bahwa ada sesuatu yang mendengarkan pada 127.0.0.1: 6000, yang merupakan port tempat registri saya (yang hanya berjalan sebagai wadah) harus ditetapkan. Sebaliknya, tampaknya mendengarkan pada::: 1: 6000.

Juga, karena diminta dan karena saya seharusnya mencantumkannya:

user@devstack01:~$ sudo docker versionClient: 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/amd64Server: 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

PEMBARUAN5

log kontainer registri:

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.1time="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.1time="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.1time="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.1time="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.1time="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.1time="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.1time="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.1time="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.1time="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.1time="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.1time="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

Docker daemon debug log ketika saya mencoba untuk mendorong gambar ke registri saya:

DEBU[0037] Calling POST /v1.22/images/localhost:6000/hello-world/pushDEBU[0037] POST /v1.22/images/localhost:6000/hello-world/push?tag=DEBU[0037] Trying to push localhost:6000/hello-world to https://localhost:6000 v2DEBU[0037] Error getting v2 registry: Get https://localhost:6000/v2/: read tcp [::1]:33560->[::1]:6000: read: connection reset by peerDEBU[0037] Trying to push localhost:6000/hello-world to http://localhost:6000 v2DEBU[0037] Error getting v2 registry: Get http://localhost:6000/v2/: read tcp [::1]:33562->[::1]:6000: read: connection reset by peerDEBU[0037] Trying to push localhost:6000/hello-world to https://localhost:6000 v1DEBU[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 v1DEBU[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: latestDEBU[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

Log registri diakhiri dengan mengatakan bahwa terjadi kesalahan, tetapi dari sisa log saya tidak dapat benar-benar melihat apa kesalahan itu. Saya bahkan membagi log menjadi stdout dan stderr dan tidak ada yang ada di stderr.

Juga, saya telah mengkonfirmasi bahwa registri mendengarkan pada ipv4. Berlari nc -l -4 6000 pengembalian Address already in use. Setidaknya, saya pikir saya sudah mengkonfirmasi hal itu. Alamat ipv4 masih tidak akan muncul dengan netstat.

PEMBARUAN6

Secara eksplisit ditentukan port ipv4 dengan docker run -d -p 127.0.0.1:8000:8000, port ini muncul sebagai mendengarkan di netstat. Masih mendapatkan kesalahan yang sama. Log Docker sedikit berbeda:

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.1time="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.1time="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.1time="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.1time="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.1time="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

Pesan" redis not configured " adalah satu-satunya hal yang sepertinya bisa menjadi masalah. Akan melihat ke dalamnya. Akan sangat, sangat menghargai wawasan tambahan.

Saya menulis ini karena saya menghabiskan berjam-jam untuk ini sebelum akhirnya memecahkannya.

Situasi saya: saya menjalankan docker versi 17 di Fedora 25 dan mencoba menjalankan registri menggunakan file konfigurasi khusus, dan mendapatkan pesan peer reset yang sama seperti di atas. Tampaknya ini terjadi karena koneksi HTTP yang tidak aman disetel ulang, dan dengan demikian saya menemukan orang-orang menyuruh saya untuk menambahkan DOCKER_OPTS="--insecure-registry localhost:6000 127.0.0.1:6000" opsi dalam /etc/sysconfig/docker dan /etc/default/docker file, dan restart layanan docker. Ini tidak memperbaiki masalah, namun (Di sini adalah dokumentasi resmi tentang itu).

Yang akhirnya berhasil adalah menjalankan registri menggunakan docker compose image. Saya mengikuti langkah-langkah yang diberikan pada digitalocean panduan, yang pada dasarnya memandu Anda menggunakan docker-compose untuk mengatur registri dan kemudian menggunakan nginx untuk mengatur SSL, yang akan melakukan trik jika dilakukan di server lokal Anda.

Namun, ternyata yang perlu saya lakukan hanyalah langkah 2, yaitu mengatur docker-compose.yml seperti yang diberikan dan memulai registri, dan voila! dorongan sekarang bekerja.

Memecahkan masalah:

Harus berlari dengan docker run -d -p 127.0.0.1:6000:5000. Tidak menggunakan localhost memastikan bahwa ipv4 digunakan (saya cukup yakin itu digunakan sebaliknya tetapi setidaknya sekarang muncul di netstat) dan wadah mendengarkan di port 5000 mereka, jadi tidak berfungsi sebaliknya.

Hei, apakah ini terpecahkan? Apa kesalahan Terbaru yang anda dapatkan?
Anda juga dapat memposting versi docker, registri, dll. Apakah Anda menjalankan registri sebagai wadah docker (atau bagaimana registri Anda berjalan?)

@ Maniankara saya telah memperbarui pertanyaannya

Periksa log untuk registri Anda. Anda mungkin melewatkan sesuatu yang penting saat Anda terganggu oleh non-masalah IPv6.

@ MichaelHampton akan melakukannya. Saya akan memposting hasilnya sebentar lagi.