問題
CircleCI上でDockerイメージを使うとDockerfileのCMDが動かない。 ローカルでDockerコンテナを起動するとCMDが動く。
原因
最初のコンテナはcommandを書かないとエントリポイントが動かない https://circleci.com/docs/2.0/configuration-reference/#docker
For primary container (listed first in the list) if no command is specified then command and image entrypoint will be ignored, to avoid errors caused by the entrypoint executable consuming significant resources or exiting prematurely. At this time all steps run in the primary container only.
例
以下のようにDockerイメージをビルドしてコンテナに入ると、エントリポイントのスクリプトが動いている事がわかる。
$ cat Dockerfile FROM selenium/standalone-chrome $ docker build . -t test:test … Successfully built 251941c07ece Successfully tagged test:test $ docker run -itd 251941c07ece 2848233eeaed57f855915a9046836f0f193d6bea71daa231df95203d8fbfac09 $ docker exec -it 2848233eeaed57f855915a9046836f0f193d6bea71daa231df95203d8fbfac09 /bin/bash seluser@2848233eeaed:/$ ps auxw USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND seluser 1 0.2 0.1 20980 3332 pts/0 Ss+ 15:44 0:00 /bin/bash /opt/bin/entry_point.sh seluser 10 0.0 0.0 4500 1616 pts/0 S+ 15:44 0:00 /bin/sh /usr/bin/xvfb-run -n 99 --server-args=-screen 0 1360x1020x24 -ac +extension RANDR java -jar /opt/selenium/selenium-server-standalone.jar seluser 21 0.2 2.0 213644 41396 pts/0 Sl+ 15:44 0:00 Xvfb :99 -screen 0 1360x1020x24 -ac +extension RANDR -nolisten tcp -auth /tmp/xvfb-run.JaVrPQ/Xauthority seluser 26 5.8 2.5 2968504 51176 pts/0 Sl+ 15:44 0:01 java -jar /opt/selenium/selenium-server-standalone.jar seluser 46 0.7 0.1 21188 3668 pts/1 Ss 15:44 0:00 /bin/bash seluser 53 0.0 0.1 37360 3228 pts/1 R+ 15:44 0:00 ps auxw
エントリポイントをたどると以下のようになっている
- https://github.com/SeleniumHQ/docker-selenium/blob/b944ebf8973c216f3cff1f380ed962edab315b08/StandaloneChrome/Dockerfile#L13
- https://github.com/SeleniumHQ/docker-selenium/blob/b944ebf8973c216f3cff1f380ed962edab315b08/NodeBase/Dockerfile#L119
- https://github.com/SeleniumHQ/docker-selenium/blob/b944ebf8973c216f3cff1f380ed962edab315b08/NodeBase/entry_point.sh
しかし、CircleCI上で動かすと、selenium-server-standaloneなどが動いていないことが確認できる。
config.yml
version: 2 jobs: build: docker: - image: selenium/standalone-chrome steps: - checkout - run: ps auxw workflows: version: 2 build_and_test: jobs: - build
対応
config.ymlにcommandを追加する。
version: 2 jobs: build: docker: - image: selenium/standalone-chrome command: ["/opt/bin/entry_point.sh"] steps: - checkout - run: ps auxw workflows: version: 2 build_and_test: jobs: - build