compose.yml の command
動機
dockerfile を使わずに compose.yml だけで書き、devcontainer.json 経由で実行しようとした。
問題
仮に web サーバをサービスとするコンテナを作ろうとしたときに非 root ユーザを追加する必要が出てきた場合にリンク先同様のことを compose.yml で実現しようとしたがここで頓挫した。
// compose.yml

services:

 myapp:

	container_name: devcontainer

	image: debian:bookworm

	working_dir: /

	tty: true

	command:

	 - /usr/bin/bash

	 - -c

	 - |-

		apt-get update && apt-get install -y openssl

		groupadd -g ${USER_GID} ${USER_NAME} && useradd -m -u ${USER_UID} -g ${USER_GID} -s /bin/bash -p $(openssl passwd -1 password) ${USER_NAME}

		while sleep 1000; do :; done // here

	user: ${USER_NAME}



// error

Error response from daemon: unable to find user gopher: no matching entries in passwd file
devcontainer.json 経由で compose.yml の command を実行するには devcontainer.json に "overrideCommand: false" を加える必要がある。overrideCommand 自体がなければ "overrideCommand: true" とみなされる。この中身は上記コードの "here" にあたる。
/etc/passwd にはユーザ名が存在し、/etc/shadow ではアクティブなユーザとなっている。同様の環境を dockerfile で作成し up してやると /etc/passwd、/etc/shadow 共に同じ状態なのに問題なく起動できる。compose.yml 単体だと dockerfile を使用してビルドするフェーズが存在しないので存在しないユーザを指名してしまっていることが考えられることから並列もしくは user -> command の順に処理が走っていると思われる。