Dockerfileで「ERROR: Service 'サービス名' failed to build: OCI runtime create failed: invalid mount」が発生した時の対処方法
created
updated
目次
Dockerfileで相対パスを指定するとERROR: Service 'サービス名' failed to build: OCI runtime create failed: invalid mount
が発生したので、その対応方法をまとめました。
エラーが発生したDockerのバージョン
Docker
$ docker -v
Docker version 20.10.2
Docker Compose
$ docker-compose -v
docker-compose version 1.25.0, build unknown
ERROR: Service 'サービス名' failed to build: OCI runtime create failed: invalid mount
エラーが発生したDockerfile
ホスト側のディレクトリを相対パスで指定するとエラーが発生しました。
VOLUME [ホスト側]相対パスディレクトリ:[コンテナ側]絶対パスディレクトリ
# 例
VOLUME ./hoge:/hoge
エラー内容
ERROR: Service 'サービス名' failed to build: OCI runtime create failed: invalid mount {Destination:[ホスト側]ディレクトリ:[コンテナ側]ディレクトリ Type:bind Source:/ボリュームの保存先/_data Options:[rbind]}: mount destination [ホスト側]ディレクトリ:[コンテナ側]ディレクトリ not absolute: unknown
対応方法
ホスト側のディレクトリを絶対パスで指定すると問題なく起動ができました。
VOLUME [ホスト側]絶対パスディレクトリ:[コンテナ側]絶対パスディレクトリ
# 例
VOLUME /{絶対パス}/hoge:/hoge
公式ドキュメント
Dockerfile リファレンス — Docker-docs-ja 19.03 ドキュメント
コンテナでデータを管理 — Docker-docs-ja 19.03 ドキュメント
ホスト側のディレクトリ は相対パスでも 名前 でも構いません。ホスト側のディレクトリ に対して絶対パスを指定したら、Docker は指定したパスを拘束マウント(bind-mount)します。この時に 名前 の値を指定したら、Docker は指定した 名前 のボリュームを作成します。
出典:コンテナでデータを管理 — Docker-docs-ja 19.03 ドキュメント(https://docs.docker.jp/engine/tutorials/dockervolumes.html#mount-a-host-directory-as-a-data-volume)
相対パスでも可能とあるのですが、起動ができませんでした。原因不明のため、とりあえず絶対パスで指定することにしました。解決方法が判明次第に追記します。
TypeError: bytes-like object is required, not 'str'
TypeError: bytes-like object is required, not 'str'
上記のエラー発生時でも、同様の対応でエラーが解消できました。