質問: ### 前提・実現したいこと rootユーザーではなく devuserで、script.shを実行したいです。 一旦root接続して`useradd devuser`を実行し `exit`で抜けてから`docker exec --user=devuser` とすればコンテナにdevuserで接続して そこでscript.shを実行するのを できれば以下のような感じで1行にまとめて行いたいです。 ただ、このやり方では コンテナ作成時はdevuserが存在しないため 以下のようなエラーが出てしまいます。 何か良い方法はないでしょうか? ### 発生している問題・エラーメッセージ ``` C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: linux spec user: unable to find user devuser: no matching entries in passwd file. ``` ### 該当のソースコード ``` docker --user=devuser run --privileged -d -P -i -t -p $PORT:80 --name $CONTAINER_NAME centos7:centos7 /bin/bash -c "source /script.sh" ```
回答: Dockerfile でイメージを派生して作って ``` RUN adduser devuser ENV HOME /home/devuser WORKDIR /home/devuser USER devuser ``` のようにするのが良いかと思いますが、 docker run で無理やりやるのであれば、 su を使うのはどうでしょう? ``` docker run --privileged -d -P -i -t -p $PORT:80 --name $CONTAINER_NAME centos7:centos7 /bin/bash -c "useradd devuser;su -l devuser -c 'source /script.sh'" ``` (すみません。どちらも未検証です)