LoginSignup
39
25

More than 5 years have passed since last update.

docker-compose upしようとしたら「Cannot start service」

Last updated at Posted at 2019-01-24

現象

docker-compose.yml
(前略)
  nginx:
    image: nginx:1.15.8-alpine
    ports:
      - 80:81
    volumes:
      - ./build_containers/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./build_containers/nginx/conf.d:/etc/nginx/conf.d
(後略)

こんなdocker-compose.ymlを書いてdocker-compose upしようとしたら以下のエラーで怒られました。

ERROR: for nginx Cannot start service nginx: b'OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:58: mounting \\\"/Users/hanako/workspace/hhvm_docker/build_containers/nginx/nginx.conf\\\" to rootfs \\\"/var/lib/docker/overlay2/c83b3706f458289bc3a092d82f657157cea6ef040c089cbe650c5ec40d95930c/merged\\\" at \\\"/var/lib/docker/overlay2/c83b3706f458289bc3a092d82f657157cea6ef040c089cbe650c5ec40d95930c/merged/etc/nginx/nginx.conf\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type'

改行がなくて読みにくいけど……どうやらvolumesで指定しているホスト側のマウントパスが悪いっぽい?

解決法

結論:ホスト側にマウント元を作ってあげないとだめだった。

ちょっと考えたら当たり前のことだったのですが、このvolumesって、「ホストマシンにあるファイルを→dockerコンテナにマウントする」という指定なんですよね。
ただ、docker-composeで指定しているマウント先がホスト側になかった場合、docker-composeが勝手にホスト側にディレクトリを作ってくれるみたいです。
なので、今回はホストに作られたnginx.confというディレクトリをコンテナ内のnginx.confにマウントしようとして、「ディレクトリをファイルにマウントしようとしていないかい?」と怒られていたのでした。
nginx.confを作成してホストマシンのマウント元(この場合は)に格納すれば解決!

今回の場合はこんなイメージですね!

ルートディレクトリ/
∟docker-compose.yml
∟build_countainers/
 ∟nginx/
  ∟nginx.conf
  ∟nginx.d/

ちなみにnginx.confのファイル自体は作成しても、中身は作り込まないままで起動すると大変なことになるので、ある程度作り込むまでは無理にvolumesの設定をしないほうがいいと思います!

39
25
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
39
25