コンテナに最適化されたGoogleCloud Compute Engineノード内で小さなdocker-composeアプリを実行しようとしていますが、docker-compose up
中にボリュームをマウントしようとすると、スタックします。
Creating lightning_redis_1 ...
Creating lightning_db_1 ...
Creating lightning_redis_1
Creating lightning_db_1 ... done
Creating lightning_api_1 ...
Creating lightning_api_1 ... error
ERROR: for lightning_api_1 Cannot start service api: error while creating mount source path '/rootfs/home/jeremy/lightning': mkdir /rootfs: read-only file sys
tem
ERROR: for api Cannot start service api: error while creating mount source path '/rootfs/home/jeremy/lightning': mkdir /rootfs: read-only file system
Encountered errors while bringing up the project.
jeremy@instance-1 ~/lightning $
私のdocker-compose.ymlファイルは次のようになります:
version: '3'
services:
client:
build: ./client
volumes:
- ./client:/usr/src/app
ports:
- "4200:4200"
- "9876:9876"
links:
- api
command: bash -c "yarn --pure-lockfile && yarn start"
sidekiq:
build: .
command: bundle exec sidekiq
volumes:
- .:/api
depends_on:
- db
- redis
- api
redis:
image: redis
ports:
- "6379:6379"
db:
image: postgres
ports:
- "5433:5432"
api:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec Rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
Docker-compose.ymlファイルの内容を変更する必要はありません-VM自体、またはその方法でコマンドを実行することで、この問題を修正できるようにしたいと思います。 VMを設定しました。理由は、コードではなく、docker-compose.ymlファイルを簡単に変更できないためです。必要なのは、短時間実行することだけです。時間の経過とともに、VM内でいくつかのdocker-composeコマンドを実行します。
コンテナに最適化されたOSは通常、ほとんどのパスを読み取り専用としてマウントします。そのため、エラーが発生します
source path '/rootfs/home/jeremy/lightning': mkdir /rootfs: read-only file sys
だからあなたはいくつかのオプションがあります
docker-composeで名前付きボリュームを使用する
以下のように音量を変更する必要があります
volumes:
- myappvol:/myapp
コンポーズでトップレベルのボリュームを定義します
volumes:
myappvol: {}
あなたがyamlを変更したくないと言ったように、これはあなたのために機能しないかもしれません
dockerを実行します-docker内で作成します
現在、メインマシンでdocker-compose
を実行していますが、代わりに、メインルートフォルダーがある別のDockerコンテナー内でdocker-compose
を使用する必要があります。
docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$PWD:/rootfs/$PWD" \
-w="/rootfs/$PWD" \
docker/compose:1.13.0 up
これは機能しますが、データはDockerコンテナー自体の内部に保持されます。
詳細については、以下の記事を参照してください
https://cloud.google.com/community/tutorials/docker-compose-on-container-optimized-os
同じエラーが発生しました。Dockerコンテナをマウントするときに「rootfs」ディレクトリを削除することで解決しました(このディレクトリに書き込むことはできません)。
変更するだけです:
docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$PWD:/rootfs/$PWD" \
-w="/rootfs/$PWD" \
docker/compose:1.13.0 up
沿って:
docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$PWD:$PWD" \
-w="$PWD" \
docker/compose:1.13.0 up