🔖
docker-compose.ymlのcommandで複数コマンドを使うときにハマった
問題
下記のようなdocker-compose.ymlを作る。
▼ docker-compose.yml
version: '3'
services:
alpine:
image: alpine
command: >
apk update &&
apk add --no-cache curl fontconfig
docker compose up
すると、 apk update
しか実行されない。
解析
docker compose config
する。
▼ docker compose config
services:
alpine:
command:
- apk
- update
image: alpine
networks:
default: null
apk update を配列として認識。
ここでぶち切られていて、以降が無視されている。
結論
/bin/sh -c ''を使う
▼ docker-compose.yml
version: '3'
services:
font:
image: alpine
command: >
/bin/sh -c '
apk update &&
apk add --no-cache curl fontconfig
'
▼ docker compose config
services:
alpine:
command:
- /bin/sh
- -c
- ' apk update && apk add --no-cache curl fontconfig '
image: alpine
networks:
default: null
補足
">"ではなく "|" としても同様
▼ docker-compose.yml
version: '3'
services:
alpine:
image: alpine
command: |
apk update &&
apk add --no-cache curl fontconfig
▼ docker compose config
services:
alpine:
command:
- apk
- update
image: alpine
networks:
default: null
commandを1行にしてもNGだった
おそらく && で千切られている。
▼ docker-compose.yml
version: '3'
services:
alpine:
image: alpine
command: apk update && apk add --no-cache curl fontconfig
▼ docker compose config
services:
alpine:
command:
- apk
- update
image: alpine
networks:
default: null
環境
> docker compose version
Docker Compose version v2.17.3
> docker version
Client: Docker Engine - Community
Version: 23.0.6
API version: 1.42
Go version: go1.19.9
Git commit: ef23cbc
Built: Fri May 5 21:18:33 2023
OS/Arch: linux/arm64
Context: default
Server: Docker Engine - Community
Engine:
Version: 23.0.6
API version: 1.42 (minimum version 1.12)
Go version: go1.19.9
Git commit: 9dbdbd4
Built: Fri May 5 21:18:33 2023
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.6.21
GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8
runc:
Version: 1.1.7
GitCommit: v1.1.7-0-g860f061
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Discussion