在Google Cloud Engine中运行docker-compose

Jer*_*ham 9 google-compute-engine docker-compose

我正在尝试在容器优化的Google Cloud 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 $ 
Run Code Online (Sandbox Code Playgroud)

我的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
Run Code Online (Sandbox Code Playgroud)

我不想在docker-compose.yml文件中更改任何内容 - 我更愿意通过在VM本身内部运行命令或者如何设置VM来解决此问题.原因是是不是我的代码,我不能轻易改变的泊坞窗,compose.yml文件,以及所有我需要做的是运行的时间周期短,执行虚拟机内的几个码头工人,撰写的命令.

Tar*_*ani 5

容器优化的OS通常会将大多数路径安装为只读。这就是为什么您得到错误

source path '/rootfs/home/jeremy/lightning': mkdir /rootfs: read-only file sys
Run Code Online (Sandbox Code Playgroud)

所以你别无选择

在docker-compose中使用命名卷

您需要像下面那样更改音量

volumes:
  - myappvol:/myapp
Run Code Online (Sandbox Code Playgroud)

并定义撰写中的顶级卷

volumes:
  myappvol: {}
Run Code Online (Sandbox Code Playgroud)

如您所说,您不想修改Yaml,那么这可能对您不起作用

在docker内部运行docker-compose

当前,您docker-compose在主机上运行,而应docker-compose在另一个具有主根文件夹的docker容器中使用

docker run \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v "$PWD:/rootfs/$PWD" \
    -w="/rootfs/$PWD" \
    docker/compose:1.13.0 up
Run Code Online (Sandbox Code Playgroud)

这可以工作,但数据将持久保存在Docker容器本身内。

有关更多详细信息,请参见下面的文章

https://cloud.google.com/community/tutorials/docker-compose-on-container-optimized-os

  • 嘿@JeremyKirkham!您是否成功安装了该卷?我也有完全一样的问题。 (2认同)