wharf docker login/push失败


编译过程如下:
#godep go build

配置如下:
runmode = dev

enablehttptls = true
httpsport = 443
httpcertfile = cert/containerops.me/containerops.me.crt
httpkeyfile = cert/containerops.me/containerops.me.key

gravatar = data/gravatar


BasePath = /tmp/registry
StaticPath = files
Endpoints = 10.13.131.26
Version = 0.9.0
Config = prod
Standalone = true
Encrypt = false
API = v2


DataDir = /tmp/ledisdb
DB = 8


FilePath = /tmp
FileName = containerops-log


Provider = ledis
SavePath = /tmp/session


Domain = 10.13.131.26

Web前端注册一个scesce帐号后,本地docker login报错如下:
# docker login 10.13.131.26
FATA Error response from daemon: no successful auth challenge for https://10.13.131.26/v2/ - errors: 

将bucket.conf中的enablehttptls配置为false,可以成功login了。不知道上面为什么会失败?

docker push又失败,报错如下:
# docker push 10.13.131.26/scesce/test
511136ea3c5a: Image push failed
FATA Error pushing to registry: Put https://10.13.131.26/v2/scesce/test/blobs/uploads/ae6967c38cdc9a1cbc76e47e28be721e?digest=tarsum.v1%2Bsha256%3Ae3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855: dial tcp 10.13.131.26:443: connection refused

这又如何破?
已邀请:

马全一

赞同来自:


需要本地指定 containerops.me 的域名到 10.13.131.26 才可以,修改 /etc/hosts 文件。

然后

docker login containerops.me
docker push containerops.me/scesce/test


如果使用 IP 的话,需要自己制作证书,替换 wharf 的证书,并且在 docker 所在的机器上修改配置才可以,你确定要这么做?

wangzi19870227 - sina攻城狮,docker爱好者

赞同来自:


本地将10.13.131.26 containerops.me加入/etc/hosts,并配置--insecure-registry containerops.me后,可以登录了。但push还是报错。

<pre>

docker login containerops.me

Username: scesce
Password:
Email:
Login Succeeded

docker push containerops.me/scesce/test:swarm

511136ea3c5a: Image push failed
FATA Error pushing to registry: Put https://10.13.131.26/v2/scesce ... b855: dial tcp 10.13.131.26:443: connection refused
</pre>

马全一

赞同来自:


<ol><li>--insecure-registry containerops.me 这个选项不配置</li><li>Endpoints = 10.13.131.26 改为 Endpoints=containerops.me</li><li>使用 0.3.1 release 的版本,目前 master 版本上改动太多,可能有问题。</li></ol>

JCheng

赞同来自:


请问为什么按你们讨论的方法无法启动 wharf 呢?配置文件如下:

runmode = dev

enablehttptls = false
httpsport = 443
httpcertfile = cert/containerops.me/containerops.me.crt
httpkeyfile = cert/containerops.me/containerops.me.key

gravatar = data/gravatar

BasePath = /tmp/registry
StaticPath = files
Endpoints = containerops.me:9000
Version = 0.9.0
Config = prod
Standalone = true
Encrypt = false
API = v1

DataDir = /tmp/ledisdb
DB = 8

FilePath = /tmp
FileName = containerops-log

Provider = ledis
SavePath = /tmp/session

Domain = containerops.me:9000

/etc/hosts 中是这样:
127.0.0.1 containerops.me

按如下命令启动:
./wharf web --address 127.0.0.1 --port 9000

结果 login 可以成功, push 失败,wharf 日志提示 Header Authorization Error,docker 是提示:
FATA HTTP code 404 while uploading metadata: "json: cannot unmarshal array into Go value of type string"

假如把 enablehttptls 设为 true 时,在网页里面登录,提示登录成功,但就是不跳转界面,手动输入网址也会跳到登录界面。所以我把 enablehttptls 设为 false 了。

另外没有配置 nginx.

请问可能是什么问题呢?

JCheng

赞同来自:


配置如下:
runmode = dev

enablehttptls = true
httpsport = 443
httpcertfile = cert/containerops.me/containerops.me.crt
httpkeyfile = cert/containerops.me/containerops.me.key

gravatar = data/gravatar

BasePath = /tmp/registry
StaticPath = files
Endpoints = containerops.me
Version = 0.9.0
Config = prod
Standalone = true
Encrypt = false
API = v1

DataDir = /tmp/ledisdb
DB = 8

FilePath = /tmp
FileName = containerops-log

Provider = ledis
SavePath = /tmp/session

Domain = containerops.me

/etc/hosts 中是这样:
0.0.0.0 containerops.me

按如下命令启动:
sudo ./wharf web --address 0.0.0.0

然后可以正常 login 和 push,不过这样子在浏览器中登录成功却无法跳转。

跳转问题没有解决,但改 enablehttptls = false 就可以在浏览器正常使用,但这时候 docker 客户端是无法 push 的。

所以我只能在 enablehttptls = true 的时候把镜像 push 上去,enablehttptls = false 的时候在浏览器登录查看。

等待后期或别人有没有好的解决方案吧。

要回复问题请先登录注册