async copy(source, target) {
    await this.bind();
    if (!this.isCreated()) {
      throw new Error('No local container found. Please run `fun edge start` to start one.');
    }
    if (!this.isRunning()) {
      throw new Error('Local container is not running. Please run `fun edge start` to start it.');
    }
    // Make sure the target path exists.
    const container = this.docker.getContainer(this.id);
    const exec = await container.exec({
      Cmd: ['mkdir', '-p', `${target}`],
      AttachStdout: true,
      AttachStderr: true,
      Tty: true
    });
    await new Promise((resolve, reject) => {
      exec.start({hijack: true}, (err, stream) => {
        stream.on('end', () => {
          resolve();
        });
        stream.on('error', (err) => {
          reject(err);
        });
        // FIXME There is no 'end' event being received on windows. Send one manually.
        if (process.platform === 'win32') {
          setTimeout(() => stream.end(), 0);
        }
      });
    });
    // Copy to the target path.
    await container.putArchive(source, {
      path: target
    });
  }
Extract an archive of files or folders from source on local filesystem to the target
directory in the container.

@param source a archive of files or folders
@param target the target directory in the container
@returns {Promise.<void>}