0

我正在尝试运行一个简单的每日批处理脚本,该脚本可以运行几个小时,之后它将发送它生成的数据并关闭实例。为此,我将以下内容放入user-data

users:
  - name: cloudservice
    uid: 2000

runcmd:
  - sudo HOME=/home/root docker-credential-gcr configure-docker
  - |
    sudo HOME=/home/root docker run \
    --rm -u 2000 --name={service_name} {image_name} {command}
  - shutdown

final_message: "machine took $UPTIME seconds to start"

我正在使用 python 脚本创建实例来生成 API 的配置,如下所示:

def build_machine_configuration(
    compute, name: str, project: str, zone: str, image: str
) -> Dict:

    image_response = (
        compute.images()
        .getFromFamily(project="cos-cloud", family="cos-stable")
        .execute()
    )
    source_disk_image = image_response["selfLink"]

    machine_type = f"zones/{zone}/machineTypes/n1-standard-1"

    # returns the cloud init from above
    cloud_config = build_cloud_config(image)

    config = {
        "name": f"{name}",
        "machineType": machine_type,
        # Specify the boot disk and the image to use as a source.
        "disks": [
            {
                "type": "PERSISTENT",
                "boot": True,
                "autoDelete": True,
                "initializeParams": {"sourceImage": source_disk_image},
            }
        ],
        # Specify a network interface with NAT to access the public
        # internet.
        "networkInterfaces": [
            {
                "network": "global/networks/default",
                "accessConfigs": [{"type": "ONE_TO_ONE_NAT", "name": "External NAT"}],
            }
        ],
        # Allow the instance to access cloud storage and logging.
        "serviceAccounts": [
            {
                "email": "default",
                "scopes": [
                    "https://www.googleapis.com/auth/devstorage.read_write",
                    "https://www.googleapis.com/auth/logging.write",
                    "https://www.googleapis.com/auth/datastore",
                    "https://www.googleapis.com/auth/bigquery",
                ],
            }
        ],
        # Metadata is readable from the instance and allows you to
        # pass configuration from deployment scripts to instances.
        "metadata": {
            "items": [
                {
                    # Startup script is automatically executed by the
                    # instance upon startup.
                    "key": "user-data",
                    "value": cloud_config,
                },
                {"key": "google-monitoring-enabled", "value": True},
            ]
        },
    }
    return config

但是,我的 docker 引擎内的磁盘空间不足。

关于如何增加可用于 docker 服务的卷大小的任何想法?

4

1 回答 1

2

Docker引擎使用Instance的磁盘空间。所以如果容器没有空间是因为Instance的磁盘已满。

您可以尝试做的第一件事是创建一个具有更大磁盘的实例。文档说:

disks[ ].initializeParams.diskSizeGb 字符串(int64 格式)

以 2 GB 为单位指定磁盘的大小。大小必须至少为 10 GB。如果您指定启动盘所需的 sourceImage,则默认大小为 sourceImage 的大小。如果不指定 sourceImage,则默认磁盘大小为 500 GB。

您可以增加diskSizeGb在部署中添加字段的大小:

"disks": [
    {
      [...]
      "initializeParams": {
        "diskSizeGb": 50,
        [...]

您可以尝试的其他事情是在实例中执行以下命令以查看磁盘是否已满以及哪个分区已满:

$ df -h

以同样的方式,您可以执行以下命令来查看Docker Engine 的磁盘使用情况

$ docker system df

客户端和守护程序 API 必须至少为 1.25 才能使用此命令。在客户端上使用 docker version 命令检查您的客户端和守护程序 API 版本。

如果您想要更多信息,可以使用标志 -v

$ docker system df -v
于 2020-04-24T10:17:44.733 回答