NOTA: Esta é uma questão de QUAL versão do docker e também de COMO encontrar a versão do docker que implementou COPY --link.
Histórico: tudo começou com minha instalação do docker local não suportando COPY --link ao analisar meu Dockerfile. Após uma pesquisa rápida, vejo que ele foi adicionado ao frontend do Dockerfile versão 1.4.0 [1].
Depois disso, fiquei preso. Não tenho ideia de como descobrir qual versão do docker implementou o frontend do Dockerfile versão 1.4.0. Mas com alguma sorte pesquisando, encontrei uma página mencionando que COPY --link foi adicionado no Docker Engine 26.0 [2][3].
E um pouco de sorte extra me levou à lista de marcos do Docker Engine 26.0 [4], que lista uma solicitação pull chamada "Dockerfile: update xx to v1.4.0" [5].
Neste ponto ainda não sei qual versão do docker tem suporte para COPY --link. Não descobri como mapear a versão do Docker Engine para uma versão do Docker.
Editar: ignore esta parte. apt show
lista os pacotes disponíveis, não os pacotes instalados. Não tenho o docker versão 24.0.5.
apt show docker.io
na minha máquina mostro que estou usando o docker versão 24.0.5 (24.0.5-0ubuntu1 ~ 20.04.1).
Mas docker version
mostre o cliente e o mecanismo com a versão 19.03.13.
Então de onde vem a versão 24.0.5? Editar: ignore esta parte.
O cenário do software docker parece uma bagunça complicada que não consigo entender. Também parece estar dividido entre os dois repositórios https://github.com/docker e https://github.com/moby .
Então, voltando à pergunta: como você deve descobrir qual versão do docker no Ubuntu implementou suporte para COPY --link?
[1] https://github.com/docker/docs/blob/c416e68959110bb8d04d92de3f9f0d3e181360b1/content/build/dockerfile/release-notes.md#140
[2] https://www.howtogeek.com/devops/how-to -accelerate-docker-builds-and-optimize-caching-with-copy-link/
[3] https://docs.docker.com/engine/release-notes/26.0/#2600
[4] https://github .com/moby/moby/issues?q=is%3Aclosed+milestone%3A26.0.0
[5] https://github.com/moby/moby/pull/47570
O recurso foi adicionado no buildkit PR #2596 .
Isso foi lançado no Dockerfile v1.4.0 (este é o analisador frontend usado pelo buildkit para interpretar seu Dockerfile).
A partir daí, você pode usar a
#syntax=docker.io/docker/dockerfile:1.4.0
linha na parte superior do Dockerfile para obter esse recurso. Ou, para evitar a dependência da#syntax
linha, você pode esperar que ela se torne o analisador de front-end padrão do Dockerfile.O frontend do Dockerfile foi atualizado para 1.4.0 no buildkit v0.10.0 .
E a primeira versão do docker engine com essa versão do buildkit é 23.0 .
Dito isso, na minha experiência, esse recurso foi mais problemático do que ganhei com ele, então removi-o rapidamente dos meus próprios Dockerfiles. Acredito que isso resultaria em problemas como permissões imprevisíveis do diretório pai.
Até onde pude rastrear o problema, descobri que este relatório de bug COPY --link não rebase as camadas em cache sobre as camadas alteradas #1099 .
Um comentário de polarathene disse:
Portanto, o problema está apenas na versão 23. As versões 22 e 24 talvez funcionem.
Um comentário posterior de mahangu disse:
No entanto, ler o problema de rastreamento vinculado mergeop/diffop que não funciona corretamente com o trabalhador Moby #45111 não parece muito otimista em relação à versão 24, escrita em 22 de dezembro de 2023.
Você terá que tentar e ver, talvez experimentando a versão beta mais recente.