優先度
docker-composeでは
build
においてdockerfile
を指定することで、Dockerfileからイメージを生成してコンテナを作成できます。
このとき、このDockerfileでデフォルトで実行されるCMDがあります。
Dockerfile
CMD ["uvicorn", "code.main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"]
このDockerfileがある状態で、docker-compose.ymlのcommand
に別のコマンドを書き込んでみます。
docker-compose.yml
version: "3.0"
services:
fastapi:
image: "image"
container_name: "container"
# ビルド
build:
dockerfile: ./docker/fastapi/Dockerfile
context: .
restart: always
tty: true
ports:
- "8000:8000"
volumes:
- .:/app
command: /bin/bash -c "sleep 10 && uvicorn code.main:app --reload --reload-dir code --host 0.0.0.0 --port 8000"
このとき、docker-compose.ymlのcommandが優先して実行されます。
そのため、10秒スリープしてからuvicornが実行されます。
Dockerfileはすでにあって、ymlで簡単に動作を変更できることを考えると、自然な動作かなと思いました。