En lignes de commandes:

On vérifie le status de Portainer, et récupère son ID.

sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c0c44926b37f 45be17a5903a "/portainer" 3 weeks ago Up 3 weeks 0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp portainer

l'ID est c0c44926b37f

On va maintenant mettre à jour l'image

sudo docker pull portainer/portainer-ce
Using default tag: latest
latest: Pulling from portainer/portainer-ce
651a8e6e1630: Pull complete
56e38df73332: Pull complete
2670ec9a4247: Pull complete
Digest: sha256:79edf1302c9b4fdb06bc23321cc551e9118c29e6d668e12e23d4e58d993ab830
Status: Downloaded newer image for portainer/portainer-ce:latest

On arrête le conteuneur
sudo docker stop c0c44926b37f

On le supprime:
sudo docker rm c0c44926b37f

Et on le relance avec sa persistance de données et en mode host pour l'intégration Gitlab:

sudo docker run -d -p 8000:8000 -p 9000:9000 --restart=unless-stopped --name="portainer" --network host -v /var/run/docker.sock:/var/run/docker.sock -v /volume2/docker/portainer:/data portainer/portainer-ce

Bonus

Mise à jour de l'agent Portainer sur une autre machine.

On reproduit les mêmes étapes, pull, suppression et relance.

Pour la relance celui-ci possède le tag qui permet à watchtower de le prendre en charge.

docker run -d -p 9022:9001 --name=portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /volume2/docker/portainer-agent:/var/lib/docker/volumes --label=com.centurylinklabs.watchtower.enable=true portainer/agent