0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コンテナDocker REST APIで立ち上げた際にコンテナ内にインストールされていない罠

Posted at

DockerコンテナをREST APIで立ち上げようとした際に、UbuntuイメージをベースにnpmやJavaなどのプログラム言語の実行環境を整えたうえで作成しようと思いました。
そして、それらのインストールコマンド自体は、REST API側で用意されています。

        $param = array(
            'Image' => 'ubuntu',
            'Cmd' =>[
                'apt-get update &&' . 
                ' apt-get install -y nodejs npm iptables php' . 
                ' apt-get install -y ruby' .
                ' apt-get install -y default-jre' .
                ' apt-get install -y python3' . 
                ' npm install -g typescript ts-node' .
                'npm start'
            ]
        );

        $url = 'http://host.docker.internal:2375/containers/create';
        $response = Http::withHeaders(['Content-Type' => 'application/json'])
            ->post($url, $param);

上記のように、まずImageをubuntuで指定し、Cmdの配列にインストールしたいものを書いていきます。
ここで、Node.js、TypeScript、Ruby、Java、Pythonの環境構築がされています。
これでコンテナが作成されました。
あとは起動させましょう。
ですが、コンテナ内にアクセスしても、nodeJSなどのファイルはインストールされていません。
実行することはできないです。

/bin/sh: 1: node: not found

となってしまいます。
じゃあもう一度aptを実行してみるかと思っても、実行されません。
なぜなのか

aptは同時に走らせることはできません。

そもそも何が起きているのかというと、起動した時点でapt-get installが完了していません。
なので時間をかければnodeのバージョンが表示されるようになります。

解決策

そもそもリクエストボディで様々なインストールを行っても起動時にはすべてのパッケージなどがインストールされた状態で起動しません。
なので、Dockerfileに記述して、

FROM ubuntu:latest

# パッケージをインストールし、apt-getプロセスが完了するまで待つ
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN apt-get update && \
    apt-get install -y nodejs npm iptables php && \
    apt-get install -y ruby && \
    apt-get install -y default-jre && \
    apt-get install -y python3 && \
    npm install -g typescript ts-node

CMD ["bash"]

これを自分オリジナルのUbuntuイメージとしてビルドします。
それをAPIのImageで渡します。

        $param = array(
            'Image' => 'original_ubuntu'
        );

ただし、この方法はローカルでビルドしてください。

以上が解決方法です。
ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?