お元気そうで残念です

仕事とか趣味のメモを残します

Drone CIでプライベートなカスタムイメージレジストリにpushする

表題のことをしようとしたら level=fatal msg="Error authenticating: exit status 1"になり困ったのでメモ。 /root/.dockerにtemp volumeをattachすると実行できます。

kind: pipeline
name: default

steps:
- name: docker build & push
  image: plugins/docker
  settings:
    repo: custom-docker-registry.hogehoge.mogemoge/hugehuge/poge
    tags: latest
    registry: custom-docker-registry.hogehoge.mogemoge
    username: 
      from_secret: username
    password:
      from_secret: password
  volumes:
  - name: docker
    path: /root/.docker

volumes:
- name: docker
  temp: {}

なんでmountするの?

普通に以下のyamlで行けそうな気がしますが、これだとlevel=fatal msg="Error authenticating: exit status 1"になります。

kind: pipeline
name: default

steps:
- name: docker build & push
  image: plugins/docker
  settings:
    repo: custom-docker-registry.hogehoge.mogemoge/hugehuge/poge
    tags: latest
    registry: custom-docker-registry.hogehoge.mogemoge
    username: 
      from_secret: username
    password:
      from_secret: password

Drone内でdockerイメージを使うとDroneが動作しているホストのdocker情報を使おうとしますが、Drone側で許可されていないと上記のエラーが発生するようです。

そのため、temp Volumeをattachすることで動作します。

Drone側でrepositoryを許可している場合は、privileged Modeを指定していればattachしなくても動作するようです。

Privileged Mode