• Stars
    star
    3,155
  • Rank 14,242 (Top 0.3 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created over 9 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The official command line interface for the DigitalOcean API.

doctl

The doctl mascot.

Build Status GoDoc Go Report Card

doctl is a command-line interface (CLI) for the DigitalOcean API.

Usage:
  doctl [command]

Available Commands:
  1-click         Display commands that pertain to 1-click applications
  account         Display commands that retrieve account details
  apps            Display commands for working with apps
  auth            Display commands for authenticating doctl with an account
  balance         Display commands for retrieving your account balance
  billing-history Display commands for retrieving your billing history
  completion      Modify your shell so doctl commands autocomplete with TAB
  compute         Display commands that manage infrastructure
  databases       Display commands that manage databases
  help            Help about any command
  invoice         Display commands for retrieving invoices for your account
  kubernetes      Displays commands to manage Kubernetes clusters and configurations
  monitoring      [Beta] Display commands to manage monitoring
  projects        Manage projects and assign resources to them
  registry        Display commands for working with container registries
  version         Show the current version
  vpcs            Display commands that manage VPCs

Flags:
  -t, --access-token string   API V2 access token
  -u, --api-url string        Override default API endpoint
  -c, --config string         Specify a custom config file (default "$HOME/.config/doctl/config.yaml")
      --context string        Specify a custom authentication context name
  -h, --help                  help for doctl
  -o, --output string         Desired output format [text|json] (default "text")
      --trace                 Show a log of network activity while performing a command
  -v, --verbose               Enable verbose output

Use "doctl [command] --help" for more information about a command.

See the full reference documentation for information about each available command.

Installing doctl

Using a Package Manager (Preferred)

A package manager allows you to install and keep up with new doctl versions using only a few commands. Our community distributes doctl via a growing set of package managers in addition to the officially supported set listed below; chances are good a solution exists for your platform.

MacOS

Use Homebrew to install doctl on macOS:

brew install doctl

doctl is also available via MacPorts. Note that the port is community maintained and may not be on the latest version.

Snap supported OS

Use Snap on Snap-supported systems to install doctl:

sudo snap install doctl
Use with kubectl

Using kubectl requires the kube-config personal-files connection for doctl:

sudo snap connect doctl:kube-config
Using doctl compute ssh

Using doctl compute ssh requires the core ssh-keys interface:

sudo snap connect doctl:ssh-keys :ssh-keys
Use with Docker

Using doctl registry login requires the dot-docker personal-files connection for doctl:

sudo snap connect doctl:dot-docker

This allows doctl to add DigitalOcean container registry credentials to your Docker configuration file.

Arch Linux

doctl is available in the official Arch Linux repository:

sudo pacman -S doctl

Fedora

doctl is available in the official Fedora repository:

sudo dnf install doctl

Nix supported OS

Users of NixOS or other supported platforms may install doctl from Nixpkgs. Please note this package is also community maintained and may not be on the latest version.

Docker Hub

Containers for each release are available under the digitalocean organization on Docker Hub. Links to the containers are available in the GitHub releases.

Downloading a Release from GitHub

Visit the Releases page for the doctl GitHub project, and find the appropriate archive for your operating system and architecture. Download the archive from your browser or copy its URL and retrieve it to your home directory with wget or curl.

For example, with wget:

cd ~
wget https://github.com/digitalocean/doctl/releases/download/v<version>/doctl-<version>-linux-amd64.tar.gz

Or with curl:

cd ~
curl -OL https://github.com/digitalocean/doctl/releases/download/v<version>/doctl-<version>-linux-amd64.tar.gz

Extract the binary:

tar xf ~/doctl-<version>-linux-amd64.tar.gz

Or download and extract with this oneliner:

curl -sL https://github.com/digitalocean/doctl/releases/download/v<version>/doctl-<version>-linux-amd64.tar.gz | tar -xzv

where <version> is the full semantic version, e.g., 1.17.0.

On Windows systems, you should be able to double-click the zip archive to extract the doctl executable.

Move the doctl binary to somewhere in your path. For example, on GNU/Linux and OS X systems:

sudo mv ~/doctl /usr/local/bin

Windows users can follow How to: Add Tool Locations to the PATH Environment Variable in order to add doctl to their PATH.

Building with Docker

If you have Docker configured, you can build a local Docker image using doctl's Dockerfile and run doctl within a container.

docker build --tag=doctl .

Then you can run it within a container.

docker run --rm --interactive --tty --env=DIGITALOCEAN_ACCESS_TOKEN="your_DO_token" doctl any_doctl_command

Building the Development Version from Source

If you have a Go environment configured, you can install the development version of doctl from the command line.

go install github.com/digitalocean/doctl/cmd/doctl@latest

While the development version is a good way to take a peek at doctl's latest features before they get released, be aware that it may have bugs. Officially released versions will generally be more stable.

Dependencies

doctl uses Go modules with vendoring.

Authenticating with DigitalOcean

To use doctl, you need to authenticate with DigitalOcean by providing an access token, which can be created from the Applications & API section of the Control Panel. You can learn how to generate a token by following the DigitalOcean API guide.

Docker users will have to use the DIGITALOCEAN_ACCESS_TOKEN environmental variable to authenticate, as explained in the Installation section of this document.

If you're not using Docker to run doctl, authenticate with the auth init command.

doctl auth init

You will be prompted to enter the DigitalOcean access token that you generated in the DigitalOcean control panel.

DigitalOcean access token: your_DO_token

After entering your token, you will receive confirmation that the credentials were accepted. If the token doesn't validate, make sure you copied and pasted it correctly.

Validating token: OK

This will create the necessary directory structure and configuration file to store your credentials.

Logging into multiple DigitalOcean accounts

doctl allows you to log in to multiple DigitalOcean accounts at the same time and easily switch between them with the use of authentication contexts.

By default, a context named default is used. To create a new context, run doctl auth init --context <new-context-name>. You may also pass the new context's name using the DIGITALOCEAN_CONTEXT environment variable. You will be prompted for your API access token which will be associated with the new context.

To use a non-default context, pass the context name to any doctl command. For example:

doctl compute droplet list --context <new-context-name>

To set a new default context, run doctl auth switch --context <new-context-name>. This command will save the current context to the config file and use it for all commands by default if a context is not specified.

The --access-token flag or DIGITALOCEAN_ACCESS_TOKEN environment variable are acknowledged only if the default context is used. Otherwise, they will have no effect on what API access token is used. To temporarily override the access token if a different context is set as default, use doctl --context default --access-token your_DO_token ....

Configuring Default Values

The doctl configuration file is used to store your API Access Token as well as the defaults for command flags. If you find yourself using certain flags frequently, you can change their default values to avoid typing them every time. This can be useful when, for example, you want to change the username or port used for SSH.

On OS X, doctl saves its configuration as ${HOME}/Library/Application Support/doctl/config.yaml. The ${HOME}/Library/Application Support/doctl/ directory will be created once you run doctl auth init.

On Linux, doctl saves its configuration as ${XDG_CONFIG_HOME}/doctl/config.yaml if the ${XDG_CONFIG_HOME} environmental variable is set, or ~/.config/doctl/config.yaml if it is not. On Windows, the config file location is %APPDATA%\doctl\config.yaml.

The configuration file is automatically created and populated with default properties when you authenticate with doctl for the first time. The typical format for a property is category.command.sub-command.flag: value. For example, the property for the force flag with tag deletion is tag.delete.force.

To change the default SSH user used when connecting to a Droplet with doctl, look for the compute.ssh.ssh-user property and change the value after the colon. In this example, we changed it to the username sammy.

. . .
compute.ssh.ssh-user: sammy
. . .

Save and close the file. The next time you use doctl, the new default values you set will be in effect. In this example, that means that it will SSH as the sammy user (instead of the default root user) next time you log into a Droplet.

Environment variables

In addition to specifying configuration using config.yaml file or program arguments, it is also possible to override values just for the given session with environment variables:

# Use instead of --context argument
DIGITALOCEAN_CONTEXT=my-context doctl auth list
# Use instead of --access-token argument
DIGITALOCEAN_ACCESS_TOKEN=my-do-token doctl

Enabling Shell Auto-Completion

doctl also has auto-completion support. It can be set up so that if you partially type a command and then press TAB, the rest of the command is automatically filled in. For example, if you type doctl comp<TAB><TAB> drop<TAB><TAB> with auto-completion enabled, you'll see doctl compute droplet appear on your command prompt.

Note: Shell auto-completion is not available for Windows users.

How you enable auto-completion depends on which operating system you're using. If you installed doctl via Homebrew, auto-completion is activated automatically, though you may need to configure your local environment to enable it.

doctl can generate an auto-completion script with the doctl completion your_shell_here command. Valid arguments for the shell are Bash (bash), ZSH (zsh), and fish (fish). By default, the script will be printed to the command line output. For more usage examples for the completion command, use doctl completion --help.

Linux Auto Completion

The most common way to use the completion command is by adding a line to your local profile configuration. At the end of your ~/.profile file, add this line:

source <(doctl completion your_shell_here)

If you are using ZSH, add this line to your ~/.zshrc file:

compdef _doctl doctl

Then refresh your profile.

source ~/.profile

MacOS (bash)

macOS users will have to install the bash-completion framework to use the auto-completion feature.

brew install bash-completion

After it's installed, load bash_completion by adding the following line to your .profile or .bashrc file.

source $(brew --prefix)/etc/bash_completion

Then refresh your profile using the appropriate command for the bash configurations file.

source ~/.profile
source ~/.bashrc

MacOS (zsh)

Add the following line to your ~/.zshrc file:

autoload -U +X compinit; compinit

Then refresh your profile.

Uninstalling doctl

Using a Package Manager

MacOS Uninstall

Use Homebrew to uninstall all current and previous versions of the doctl formula on macOS:

brew uninstall -f doctl

To completely remove the configuration, also remove the following directory:

rm -rf "$HOME/Library/Application Support/doctl"

Examples

doctl is able to interact with all of your DigitalOcean resources. Below are a few common usage examples. To learn more about the features available, see the full tutorial on the DigitalOcean community site.

  • List all Droplets on your account:
doctl compute droplet list
  • Create a Droplet:
doctl compute droplet create <name> --region <region-slug> --image <image-slug> --size <size-slug>
  • Assign a Floating IP to a Droplet:
doctl compute floating-ip-action assign <ip-addr> <droplet-id>
  • Create a new A record for an existing domain:
doctl compute domain records create --record-type A --record-name www --record-data <ip-addr> <domain-name>

doctl also simplifies actions without an API endpoint. For instance, it allows you to SSH to your Droplet by name:

doctl compute ssh <droplet-name>

By default, it assumes you are using the root user. If you want to SSH as a specific user, you can do that as well:

doctl compute ssh <user>@<droplet-name>

Tutorials

More Repositories

1

nginxconfig.io

⚙️ NGINX config generator on steroids 💉
JavaScript
27,244
star
2

godo

DigitalOcean Go API client
Go
1,328
star
3

go-libvirt

Package libvirt provides a pure Go interface for interacting with Libvirt. Apache 2.0 Licensed.
Go
815
star
4

do_user_scripts

Shell
804
star
5

Kubernetes-Starter-Kit-Developers

Hands-on tutorial and Automation stack for an operations-ready DigitalOcean Kubernetes (DOKS) cluster.
HCL
748
star
6

go-qemu

Go packages to interact with QEMU using the QEMU Machine Protocol (QMP). Apache 2.0 Licensed.
Go
719
star
7

do-agent

Collects system metrics from DigitalOcean Droplets
Go
586
star
8

csi-digitalocean

A Container Storage Interface (CSI) Driver for DigitalOcean Block Storage
Go
572
star
9

clusterlint

A best practices checker for Kubernetes clusters. 🤠
Go
544
star
10

vulcan

Vulcan extends Prometheus adding horizontal scalability and long-term storage
Go
531
star
11

digitalocean-cloud-controller-manager

Kubernetes cloud-controller-manager for DigitalOcean (beta)
Go
520
star
12

hacktoberfest

Hacktoberfest - App to manage the annual open-source challenge, used for the 2019 & 2020 seasons.
Ruby
510
star
13

droplet_kit

DropletKit is the official DigitalOcean API client for Ruby.
Ruby
507
star
14

terraform-provider-digitalocean

Terraform DigitalOcean provider
Go
492
star
15

action-doctl

GitHub Actions for DigitalOcean - doctl
JavaScript
454
star
16

ceph_exporter

Prometheus exporter that scrapes meta information about a ceph cluster.
Go
396
star
17

engineering-code-of-conduct

Code of Conduct for DigitalOcean's Engineering Team
289
star
18

go-openvswitch

Go packages which enable interacting with Open vSwitch and related tools. Apache 2.0 Licensed.
Go
282
star
19

kubernetes-sample-apps

Example DigitalOcean Kubernetes workload with service exposed through a DO load-balancer.
Python
252
star
20

marketplace-partners

Image validation, automation, and other tools for DigitalOcean Marketplace Vendors and Custom Image users
Shell
193
star
21

gta

gta: do transitive analysis to find packages whose dependencies have changed
Go
182
star
22

heartbot

A shot of love for your favorite chat client.
CoffeeScript
178
star
23

marketplace-kubernetes

This repository contains the source code and deployment scripts for Kubernetes-based applications listed in the DigitalOcean Marketplace.
Shell
159
star
24

prometheus-client-c

A Prometheus Client in C
C
154
star
25

go-smbios

Package smbios provides detection and access to System Management BIOS (SMBIOS) and Desktop Management Interface (DMI) data and structures. Apache 2.0 Licensed.
Go
152
star
26

kartograph

Kartograph makes it easy to generate and convert JSON. It's intention is to be used for API clients.
Ruby
147
star
27

OpenVPN-Pihole

https://marketplace.digitalocean.com/apps/openvpn-pihole
Shell
146
star
28

captainslog

A Syslog Protocol Parser
Go
136
star
29

resource_kit

Resource Kit provides tools to aid in making API Clients. Such as URL resolving, Request / Response layer, and more.
Ruby
134
star
30

go-workers2

better-go-workers
Go
131
star
31

supabase-on-do

HCL
129
star
32

droplet-1-clicks

Packer build scripts for DigitalOcean Marketplace 1-clicks.
Shell
114
star
33

doks-debug

A Docker image with Kubernetes manifests for investigation and troubleshooting.
Dockerfile
109
star
34

openapi

The OpenAPI v3 specification for DigitalOcean's public API.
JavaScript
104
star
35

sample-dockerfile

⛵ App Platform sample Docker application.
Go
92
star
36

container-blueprints

DigitalOcean Kubernetes(DOKS) Solution Blueprints
HCL
92
star
37

app_action

Deploy to DigitalOcean Container Registry and App Platform
Go
90
star
38

DOKS

Managed Kubernetes designed for simple and cost effective container orchestration.
80
star
39

pydo

Official DigitalOcean Python Client based on the DO OpenAPIv3 specification
Python
78
star
40

do-markdownit

Markdown-It plugin for the DigitalOcean Community.
JavaScript
77
star
41

do-operator

The Kubernetes Operator for DigitalOcean
Go
76
star
42

navigators-guide

Book and code examples that help to build infrastructure on DigitalOcean
Shell
76
star
43

sample-django

Django sample app for DigitalOcean App Platform
Python
76
star
44

logtalez

logtalez is a minimal command line client (and API) for retrieving log streams from the rsyslog logging daemon over zeromq.
Go
73
star
45

databases

66
star
46

sample-nodejs

⛵ App Platform sample Node.js application.
JavaScript
65
star
47

sample-nextjs

⛵ App Platform sample Next.js application.
JavaScript
61
star
48

debian-sys-maint-roll-passwd

Script to update password for MySQL user "debian-sys-maint"
Shell
58
star
49

sample-python

⛵ App Platform sample Python application.
Python
57
star
50

vmtop

Real-time monitoring of KVM/Qemu VMs
Python
54
star
51

kubecon-2022-doks-workshop

HCL
48
star
52

k8s-staticroute-operator

Create static routes for your k8s nodes using CRDs.
Python
48
star
53

sample-flask

Sample Flask Application to be deployed on DigitalOcean's App Platform
HTML
48
star
54

pgremapper

CLI tool for manipulating Ceph's upmap exception table.
Go
46
star
55

sample-laravel

⛵ App Platform sample Laravel application.
PHP
45
star
56

sample-golang

⛵ App Platform sample Golang application.
Go
40
star
57

sample-functions-nodejs-qrcode

HTML
39
star
58

sample-monorepo

Sample mono repo app (with multiple components) on the DigitalOcean App Platform.
Go
38
star
59

tos

DigitalOcean's Terms of Service agreement
37
star
60

droplet-agent

Droplet Agent is the daemon that runs on customer droplets to enable some features such as web console access.
Go
37
star
61

ansible-collection

DigitalOcean Ansible Collection
Python
34
star
62

sample-php

⛵ App Platform sample PHP application.
PHP
33
star
63

openvswitch_exporter

Command openvswitch_exporter implements a Prometheus exporter for Open vSwitch.
Go
32
star
64

sample-html

⛵ App Platform sample HTML application.
HTML
31
star
65

sample-functions-nodejs-helloworld

JavaScript
31
star
66

sample-react

⛵ App Platform sample React application.
JavaScript
30
star
67

mastodon-on-kubernetes

Setting up Mastodon on DigitalOcean Kubernetes
HCL
30
star
68

sample-functions-python-jokes

Python
30
star
69

flipop

Floating IP Controller for Kubernetes
Go
29
star
70

marketplace-pi-hole-vpn

Pi-hole VPN image for Marketplace with Unbound & Wireguard
Shell
29
star
71

sample-functions-golang-helloworld

Go
29
star
72

go-metadata

Go client for the metadata API.
Go
27
star
73

github-changelog-generator

A tool to generate changelog entries from GitHub repositories.
Go
26
star
74

omniauth-digitalocean

DigitalOcean OAuth2 Strategy for OmniAuth
Ruby
26
star
75

sample-push-to-deploy-doks

Push-to-deploy example using DOCR and DOKS
Python
25
star
76

netbox-ip-controller

A Kubernetes controller to import the IP addresses and metadata of pods and services into NetBox.
Go
25
star
77

sample-functions-python-helloworld

Python
23
star
78

terraform-vault-github-oidc

Terraform module to configure Vault for GitHub OIDC authentication from Action runners.
HCL
22
star
79

terraform-provider-sendgrid

Sendgrid Terraform Provider
Go
20
star
80

sample-expressjs

⛵ App Platform sample Express.js application.
19
star
81

sample-nuxtjs

⛵ App Platform sample Nuxt.js application.
Vue
19
star
82

production-ready-kubernetes-workshop

The repository for DigitalOcean's Production Ready Kubernetes Workshop
Python
18
star
83

sample-vuejs

⛵ App Platform sample Vue.js application.
Vue
17
star
84

sample-functions-python-twilio-sms

Sending sms via Twilio
Python
16
star
85

sample-functions-php-helloworld

A PHP helloworld sample function for Cloud Functions
PHP
15
star
86

sample-rails

⛵ App Platform sample Ruby on Rails application.
Ruby
15
star
87

sample-functions-php-numberstowords

PHP
15
star
88

sample-hugo

⛵ App Platform sample Hugo application.
15
star
89

sample-functions-python-sendgrid-email

Sending emails via Sendgrid API
Python
14
star
90

github-pr-resource

Github pull request resource for Concourse
Go
13
star
91

icingaweb2-module-netboximport

Icinga2 Director integration for Netbox
PHP
12
star
92

docker-shipit-engine

Docker image for https://github.com/Shopify/shipit-engine
Ruby
11
star
93

sample-functions-golang-presigned-url

Creating a presigned url for DO's Spaces
Go
10
star
94

digitalocean-ceph-lab

Terraform and Ansible automation to provision and configure a Ceph test environment on DigitalOcean.
HCL
10
star
95

k8s-adoption-journey

Hands-on tutorial for going from Day-1 to production on DigitalOcean Kubernetes. Goes with "Kubernetes Adoption Journey" document.
Python
9
star
96

sample-laravel-api

⛵ App Platform sample Laravel API application.
PHP
9
star
97

gnulib

A mirror of the gnulib portability and testing suite for internal builds that use it as a submodule
C
8
star
98

serverless-jamstack

Contains sample code for a serverless Jamstack tutorial published on docs.digitalocean.com
JavaScript
8
star
99

golang-slackbot

Composed slackbot golang function with 3 sample functions
Go
8
star
100

marketplace-blueprints

HCL
8
star