docker-compose.yml 内で volumes に 相対パスしてたらコケてたやつ。

docker-compose で volumes に 相対パスを指定したらこけた。

エラーが出る

docker-compose up すると 以下のエラーでコケる。初心者なのでよくわからん。

エラー内容

❯ docker-compose up
Creating frontend_appserver_1 ... error

ERROR: for frontend_appserver_1  Cannot create container for service appserver: b'invalid volume specification: \'/Users/natsuki/Practice/frontend/react-sample:nodejs/react-sample:rw\': invalid mount config for type "bind": invalid mount path: \'nodejs/react-sample\' mount path must be absolute'

ERROR: for appserver  Cannot create container for service appserver: b'invalid volume specification: \'/Users/natsuki/Practice/frontend/react-sample:nodejs/react-sample:rw\': invalid mount config for type "bind": invalid mount path: \'nodejs/react-sample\' mount path must be absolute'
ERROR: Encountered errors while bringing up the project.

bind タイプのコンフィグにしてはおかしいぞ?
絶対パス使えよ?

まじかってかんじ。一応絶対パスにすれば動くけど絶対にしたくない。

docker-compose.yml

は、こんなの。

appserver:
  build: .
  volumes:
    - ./react-sample:/nodejs/react-sample
  ports:
    - "3000:3000"
  command: npm run start
  tty: true

Dockerfile

#ubuntu をベースイメージにする
FROM centos:latest

# ENVをdevelopmentに設定する
ENV MYENV=development

# /appDirectoryをワークDirectoryに設定
WORKDIR /nodejs/react-sample

# nodejs-8.10.0のinstall
RUN ["yum", "update", "-y"]
RUN curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
RUN ["yum", "install", "-y", "nodejs-8.10.0"]

# vim の install
RUN ["yum", "install", "-y", "vim"]

RUN ["mkdir", "react-sample"]
RUN ["npm", "init", "-y"]
RUN ["npm", "i", "react@16.2.0", "react-dom@16.2.0"]
RUN ["npm", "i", "-D", "webpack@4.4.1", "webpack-cli@2.0.11"]
COPY ./react-sample/package-lock.json package-lock.json

EXPOSE 3000

解決法

Dockerfile に

VOLUME [ "/nodejs/react-sample" ]

を追記した。

マウントされていなかったから動かなかったみたい。

日本語のソースなかったので同様の症状に悩んでいる人のためになれば嬉しい。

そしてもしかしたらこれはまちがった問題解消かもしれないので正しい方法を知っている人がいたら教えてほしい。

追記

先述のdocker-compose.yml のまま build からやりなおしたら動くようになった。ロースキルつら。。