我收到以下错误(请参阅下面的执行命令):
DEBU[0000] using "text" logging formatter
panic: Get : 301 response missing Location header
goroutine 1 [running]:
github.com/docker/distribution/registry/handlers.NewApp(0x7f5f7ba3eab8, 0xc2080cf1a0, 0xc20802b8a0, 0x3, 0xc20802b8d8, 0x5, 0xc20802b908, 0x4, 0xc2080ce720, 0xa5e630, ...)
/go/src/github.com/docker/distribution/registry/handlers/app.go:81 +0x5eb
main.main()
/go/src/github.com/docker/distribution/cmd/registry/main.go:62 +0x439
goroutine 6 [syscall]:
os/signal.loop()
/usr/src/go/src/os/signal/signal_unix.go:21 +0x1f
created by os/signal.init·1
/usr/src/go/src/os/signal/signal_unix.go:27 +0x35
goroutine 10 [runnable]:
net/http.(*persistConn).readLoop(0xc20809d6b0)
/usr/src/go/src/net/http/transport.go:928 +0x9ce
created by net/http.(*Transport).dialConn
/usr/src/go/src/net/http/transport.go:660 +0xc9f
goroutine 17 [syscall, locked to thread]:
runtime.goexit()
/usr/src/go/src/runtime/asm_amd64.s:2232 +0x1
goroutine 11 [select]:
net/http.(*persistConn).writeLoop(0xc20809d6b0)
/usr/src/go/src/net/http/transport.go:945 +0x41d
created by net/http.(*Transport).dialConn
/usr/src/go/src/net/http/transport.go:661 +0xcbc
我按如下方式启动 docker 注册表:
docker run \
--rm -it \
--env="REGISTRY_STORAGE_S3_ACCESSKEY=SECRET_KEY" \
--env="REGISTRY_STORAGE_S3_SECRETKEY=ACCESS_KEY" \
--env="REGISTRY_STORAGE_S3_BUCKET=bucket" \
--env="REGISTRY_HTTP_TLS_CERTIFICATE=/go/src/github.com/docker/distribution/certs/domain.crt" \
--env="REGISTRY_HTTP_TLS_KEY=/go/src/github.com/docker/distribution/certs/domain.key" \
--env="REGISTRY_HTTP_ADDR=localhost:5000" \
--name="registry" \
--publish="5000:5000" \
--volume="/sandbox/docker/certs:/go/src/github.com/docker/distribution/certs" \
--volume="/sandbox/docker/registry/config.yml:/go/src/github.com/docker/distribution/cmd/registry/config.yml" \
distribution/registry cmd/registry/config.yml
出于安全原因,其中 REGISTRY_STORAGE_S3_ACCESSKEY
、REGISTRY_STORAGE_S3_SECRETKEY
和 REGISTRY_STORAGE_S3_BUCKET
保留虚拟值。我可以使用它们从所需的 s3 存储桶中写入\读取。
这里有一些更多信息:
$ docker info
Containers: 0
Images: 109
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 109
Dirperm1 Supported: false
Execution Driver: native-0.2
Kernel Version: 3.13.0-53-generic
Operating System: Ubuntu 14.04.2 LTS
CPUs: 4
Total Memory: 15.54 GiB
Name: heaven
ID: REMOVED_FOR_SECURITY_REASONS
WARNING: No swap limit support
目录结构:
$ ls -R /sandbox/docker
/sandbox/docker/certs:
domain.crt
domain.key
/sandbox/docker/registry:
config.yml
我的config.yml
文件:
$ cat /sandbox/docker/registry/config.yml
version: 0.1
log:
level: debug
formatter: text
fields:
service: registry
environment: prod
storage:
s3:
accesskey: awsaccesskey
secretkey: awssecretkey
region: us-west-1
bucket: bucket
encrypt: true
secure: true
v4auth: true
chunksize: 5242880
rootdirectory: /s3/object/name/prefix
cache:
layerinfo: inmemory
auth:
token:
realm: token-realm
service: token-service
issuer: registry-token-issuer
rootcertbundle: /root/certs/bundle
http:
addr: localhost:5000
secret: myspecialsecret
tls:
certificate: /go/src/github.com/docker/distribution/certs/domain.crt
key: /go/src/github.com/docker/distribution/certs/domain.key
debug:
addr: localhost:5001
认证文件:
$ grep -r "^----" /sandbox/docker/certs/
/sandbox/docker/certs/domain.crt:-----BEGIN CERTIFICATE-----
/sandbox/docker/certs/domain.crt:-----END CERTIFICATE-----
/sandbox/docker/certs/domain.crt:-----BEGIN CERTIFICATE-----
/sandbox/docker/certs/domain.crt:-----END CERTIFICATE-----
/sandbox/docker/certs/domain.key:-----BEGIN CERTIFICATE-----
/sandbox/docker/certs/domain.key:-----END CERTIFICATE-----
其中 domain.crt
还包含中间证书(在底部连接)。
谁能指出问题所在吗?
我知道我可以构建一个新的注册表镜像,如docker docs所示,但我只想使用 docker run
来完成此操作,而不使用 docker build
。
最佳答案
当配置文件中指定了错误的 S3 区域时,就会发生这种情况。请参阅此处的类似报告:https://github.com/docker/distribution/issues/854
关于docker run 注册表错误 301 响应缺少位置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30413863/