62547


先人が作ったコンテナを docker-compose up -d で動かしたことしかなく  
docker イメージを初めて作るのですが

以下のような mlflow という機械学習のライブラリが docker を作成する時の  
ログをコピーしてきて最後に .ssh の中身だけを設置する Dockerfile を描いてみたのですが

`docker build -t test -f Dockerfile .`

で docker images は作成できるものの

`docker run <REPOSITORY名>`  
を実行すると

[code]

    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    IndexError: list index out of range
    
[/code]

というエラーになります  
このエラーが何が出してるエラーなのかも不明なのですが  
なんとなく

[code]

    ENTRYPOINT ["python", "-c", "import sys; from mlflow.models import container as C; C._init(sys.argv[1])"]
    
[/code]

の部分で argv[1] がないせいなのかなと思ってます  
docker のエントリーポイントにどうやって引数を渡せばいいのでしょうか

またいつも使ってるコンテナは  
`docker exec -it <name> /bin/bash`  
で仮想マシンのようにログインできるのですが

今回作ったコンテナは docker run をしてもすぐに止まってしまって  
中のファイル構成を調べることもできません  
どうすれば常に running 状態にできるのでしょうか

[code]

    FROM ubuntu:16.04
    RUN apt-get -y update && apt-get install -y --no-install-recommends wget curl nginx ca-certificates bzip2 build-essential cmake openjdk-8-jdk git-core maven && rm -rf /var/lib/apt/lists/*
    RUN curl https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh >> miniconda.sh
    RUN bash ./miniconda.sh -b -p /miniconda; rm ./miniconda.sh;
    ENV PATH="/miniconda/bin:$PATH"
    ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    ENV GUNICORN_CMD_ARGS="--timeout 60 -k gevent"
    WORKDIR /opt/mlflow
    RUN pip install mlflow==1.5.0
    RUN mvn --batch-mode dependency:copy -Dartifact=org.mlflow:mlflow-scoring:1.5.0:pom -DoutputDirectory=/opt/java
    RUN mvn --batch-mode dependency:copy -Dartifact=org.mlflow:mlflow-scoring:1.5.0:jar -DoutputDirectory=/opt/java/jars
    RUN cp /opt/java/mlflow-scoring-1.5.0.pom /opt/java/pom.xml
    RUN cd /opt/java && mvn --batch-mode dependency:copy-dependencies -DoutputDirectory=/opt/java/jars
    ENV {disable_env}="false"
    RUN python -c "from mlflow.models.container import _install_pyfunc_deps;_install_pyfunc_deps(None, False)"
    ENTRYPOINT ["python", "-c", "import sys; from mlflow.models import container as C; C._init(sys.argv[1])"]
    
    RUN mkdir -p /root/.ssh
    COPY setup_files/* /root/.ssh/
    RUN chmod 600 /root/.ssh/*
    
[/code]


CC BY-SA 4.0
2020-01-22T08:48:33.253
62455
2020-01-25T15:48:50.423
question
docker
Dockerfile の ENTRYPOINT に引数を渡す方法


C._init() が何をするものかわかりませんが、`docker run` の最後に引数を指定すれば `sys.argv[1]`
に入力されませんでしょうか？

[code]

    docker run <REPOSITORY名> ABC
      ↓
    python -c "import sys; from mlflow.models import container as C; C._init(sys.argv[1])" ABC
    
[/code]

[DockerfileのCMDとENTRYPOINTを改めて解説する](https://qiita.com/uehaj/items/e6dd013e28593c26372d)  
[[docker] CMD とENTRYPOINT
の違いを試してみた](https://qiita.com/hihihiroro/items/d7ceaadc9340a4dbeb8f)


CC BY-SA 4.0
2020-01-25T15:48:50.423
62547
2020-01-25T15:48:50.423
4603
62455
answer