HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
docker
cli
Go2018–2026
docker / cli

cli

The Docker CLI

20Distinct people
21Mentions
0Explicit recommenders
6.1KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

The Docker CLI

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

  • moby/moby · linked in 2 of the same discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 11:56:56 AM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year21 dated mentions

Observed mentions: 2018-08-16 04:08:34 UTC to 2026-10-31 03:32:53 UTC.

02462018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20182019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 4 mentions; 1 submissions, 3 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 4 mentions; 1 submissions, 3 comments20222023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 7 mentions; 0 submissions, 7 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC101
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC101
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC413
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC202
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC413
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC101
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC707
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC000
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC101

What Hacker News says

21 sources
I know it's this is a rather long tangent and not the main point of the article, but regarding "Docker Swarm over Kubernetes", I've had a ton of bad experiences at my employer running a production Swarm cluster. Among them: - Docker Swarm and Docker Compose use different parsers for `docker-compose.yaml` files, which may lead to the same file working with Compose but not with Swarm ([1]). - A Docker network only supports up to 128 joined containers (at least when using Swarm). This is due to the default address space for a Docker network using a /24 network (which the documentation only mentions in passing). But, Docker Swarm may not always show error message indicating that it's a network problem. Sometimes services would just stay in "New" state forever without any indictation what's wrong (see e.g. [2]). - When looking a up a service n
Read the rest
ame, Docker Swarm will use the IP from the first network (sorted lexically) where the service name exists. In a multi-tenant setup, where a lot of services are connected to an ingress network (i.e. Taefik), this may lead to a service connecting to a container from a different network than expected. The only solution is to always append the network name to the service name (e.g. service.customer-network; see [3]). - Due to some reason I still wasn't able to figure out, the cluster will sometimes just break. The leader loses its connection to the other manager nodes, which in turn do NOT elect a new leader. The only solution is to force-recreate the whole cluster and then redeploy all workloads (see [4]). Sure, our use case is somewhat special (running a cluster used by a lot of tenants), and we were able to find workarounds (some more dirty than others) to most of our issues with Docker Swarm. But what annoys me is that for almost all of the issues we had, there was a GitHub ticket that didn't get any official response for years. And in many cases, the reporters just give up waiting and migrate to K8s out of despair or frustration. Just a few quotes from the linked issues: > We, too, started out with Docker Swarm and quickly saw all our production clusters crashing every few days because of this bug. […] This was well over two years (!) ago. This was when I made the hard decision to migrate to K3s. We never looked back. > We recently entirely gave up on Docker Swarm. Our new cluster runs on Kubernetes, and we've written scripts and templates for ourselves to reduce the network-stack management complexities to a manageable level for us. […] In our opinion, Docker Swarm is not a production-ready containerization environment and never will be. […] Years of waiting and hoping have proved fruitless, and we finally had to go to something reliable (albeit harder to deal with). > IMO, Docker Swarm is just not ready for prime-time as an enterprise-grade cluster/container approach. The fact that it is possible to trivially (through no apparent fault of your own) have your management cluster suddenly go brainless is an outrage. And "fixing" the problem by recreating your management cluster is NOT a FIX! It's a forced recreation of your entire enterprise almost from scratch. This should never need to happen. But if you run Docker Swarm long enough, it WILL happen to you. And you WILL plunge into a Hell the scope of which is precisely defined by the size and scope of your containerization empire. In our case, this was half a night in Hell. […] This event was the last straw for us. Moving to Kubernetes. Good luck to you hardy souls staying on Docker Swarm! Sorry, if this seems like like Docker Swarm bashing. K8s has it's own issues, for sure! But at least there is a big community to turn to for help, if things to sideways. [1]: https://github.com/docker/cli/issues/2527 [2]: https://github.com/moby/moby/issues/37338 [3]: https://github.com/docker/compose/issues/8561#issuecomment-1... [4]: https://github.com/moby/moby/issues/34384
In Never Update Anything
I am a self-employed furniture maker. I'm that guy who somewhat infamously no longer builds software[0]. About a year ago I moved my operations from a makerspace to my own shop. That's come with its ups and downs. On the one hand, I know which idiot last used a tool: me. On the other, I would no longer see other humans besides my wife most weeks. To keep sane I also work one day a week at a bike shop fixing bikes. It's something I'd done on a volunteer basis many years back. The unexpected nice thing about this is that it gives me projects that are an hour or two in size in addition to the many-week sized projects that I do as part of my business. It's sort of like getting to fix a small bug in the midst of adding a big feature; it lets me pop out of the big project for a bit and see something else through from start to finish and see som
Read the rest
e tangible progress before diving back into a long-running project that moves forward in fits and starts. Beyond getting to tackle some bite-sized projects, I'd say the thing that sustains me is getting to work with clients. It's tons of fun when people come to me with a vision that we can iterate on and bring into reality. And then the flip side is also rewarding: getting to scratch an itch and turn a design I've been turning over in my mind into reality. Edited to add: If you've got an idea for a furniture or woodworking project, my contact info and website are in my profile. https://github.com/docker/cli/issues/267#issuecomment-695149...
In Ask HN: How many of you are self employed?
The greatest such story I've ever read is this one from a GitHub issue comment: https://github.com/docker/cli/issues/267#issuecomment-695149... > Sorry I missed your comment of many months ago. I no longer build software; I now make furniture out of wood. The hours are long, the pay sucks, and there's always the opportunity to remove my finger with a table saw, but nobody asks me if I can add an RSS feed to a DBMS, so there's that :-)
In Ask HN: Has anyone started over outside of tech?
> As someone only a little older than yourself, I would say this: your job will never love you back, and especially in the software realm, it may not be as fulfilling as something like woodworking or therapy. It does pay the bills, though. Reminded me of https://github.com/docker/cli/issues/267#issuecomment-695149... > I no longer build software; I now make furniture out of wood. The hours are long, the pay sucks, and there's always the opportunity to remove my finger with a table saw, but nobody asks me if I can add an RSS feed to a DBMS, so there's that :-) Relevant discussion of that thread: https://news.ycombinator.com/item?id=24541964 I think you summarized it well :)
In Tell HN: I have the perfect job, why is it not enough?
It appears that docker cli will also eventually remove the short option for help. Their reasoning for it is to avoid conflicts with args (eg hostname '-h') in certain subcommands.[0][1] But I don't see why they couldn't leave the base command's short option alone-- the user intent of a bare "docker -h" (or "podman -h") seems obvious. [0] https://docs.docker.com/engine/deprecated/#-h-shorthand-for-... [1] https://github.com/docker/cli/issues/3249
In -h –Help -help Help –? –?
Best: probably that of Docker. https://github.com/docker/cli Why: it didn't force you to read man pages or look up documentation, but instead allowed every command to explain what it does to you, either when you'd run it with --help, or just no parameters (in case it expects any). Furthermore, invocations of these commands weren't just a long string of arguments, but rather commands that are logically grouped and can essentially be navigated as a tree. All of that made it extremely useful and pleasant, at least in my eyes. It just feels like it's made to actually be used by developers and to help them as much as possible. Whether you agree with me on that or not, i suggest that you have a look at this excellent talk by Dylan Beattie, "Life, Liberty and the Pursuit of APIness: The Secret to Happy Code", which talked more about the discover
Read the rest
ability of systems and the developer experience: https://www.youtube.com/watch?v=lFRKrHE8oPo Nowadays, you can actually use something like Typer for Python to create similarly useful interfaces, which i strongly advise you to have a brief look at: https://typer.tiangolo.com/ Example: $ docker Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Options: ... (a list of items) -v, --version Print version information and quit Management Commands: ... (a list of items) image Manage images Commands: ... (a list of items) Run 'docker COMMAND --help' for more information on a command. To get more help with docker, check out our guides at https://docs.docker.com/go/guides/ $ docker image Usage: docker image COMMAND Manage images Commands: ... (a list of items) ls List images ... (a list of items) pull Pull an image or a repository from a registry Run 'docker image COMMAND --help' for more information on a command. $ docker image pull "docker image pull" requires exactly 1 argument. See 'docker image pull --help'. Usage: docker image pull [OPTIONS] NAME[:TAG|@DIGEST] Pull an image or a repository from a registry $ docker image pull alpine:3.15 3.15: Pulling from library/alpine 59bf1c3509f3: Pull complete Digest: sha256:21a3deaa0d32a8057914f36584b5288d2e5ecc984380bc0118285c70fa8c9300 Status: Downloaded newer image for alpine:3.15 docker.io/library/alpine:3.15 $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE alpine 3.15 c059bfaa849c 11 hours ago 5.59MB The worst: tar Why: https://xkcd.com/1168/ In short, it's the exact opposite of the previous example. Frankly, without memorizing the flags, i still have no idea how to work with archives with it. Say, i want to create a compressed archive with it. Example: $ tar tar: You must specify one of the '-Acdtrux', '--delete' or '--test-label' options Try 'tar --help' or 'tar --usage' for more information. $ tar --usage Usage: tar [-AcdrtuxGnSkUWOmpsMBiajJzZhPlRvwo?] [-g FILE] [-C DIR] [-T FILE] [-X FILE] [-f ARCHIVE] [-F NAME] [-L NUMBER] [-b BLOCKS] [-H FORMAT] [-V TEXT] [-I PROG] [-K MEMBER-NAME] [-N DATE-OR-FILE] ... (a really long list of items) $ tar --help Usage: tar [OPTION...] [FILE]... GNU 'tar' saves many files together into a single tape or disk archive, and can restore individual files from the archive. Examples: tar -cf archive.tar foo bar # Create archive.tar from files foo and bar. tar -tvf archive.tar # List all files in archive.tar verbosely. tar -xf archive.tar # Extract all files from archive.tar. Main operation mode: ... (a list of items) -c, --create create a new archive Operation modifiers: ... (a list of items) Local file name selection: ... (a list of items) File name matching options (affect both exclude and include patterns): ... (a list of items) Overwrite control: ... (a list of items) Select output stream: ... (a list of items) Handling of file attributes: ... (a list of items) Handling of extended file attributes: ... (a list of items) Device selection and switching: ... (a list of items) -f, --file=ARCHIVE use archive file or device ARCHIVE Device blocking: ... (a list of items) Archive format selection: ... (a list of items) FORMAT is one of the following: ... (a list of items) Compression options: ... (a list of items) -z, --gzip, --gunzip, --ungzip filter the archive through gzip Local file selection: ... (a list of items) File name transformations: ... (a list of items) Informative output: ... (a list of items) -v, --verbose verbosely list files processed Compatibility options: ... (a list of items) Other options: ... (a list of items) Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX. The version control may be set with --backup or VERSION_CONTROL, values are: ... (a list of items) Valid arguments for the --quoting-style option are: ... (a list of items) *This* tar defaults to: --format=gnu -f- -b20 --quoting-style=escape --rmt-command=/usr/lib/tar/rmt.exe --rsh-command=/usr/bin/rsh $ # Copied from the Internet, because the documentation is overwhelming $ tar -vczf new-archive.tar.gz ./files-i-want-to-archive ./files-i-want-to-archive/ ./files-i-want-to-archive/test1.txt ./files-i-want-to-archive/test2.txt ./files-i-want-to-archive/test3.txt $ # Consider the full format instead, maybe we should actually use the full parameters more often? $ tar --verbose --create --gzip --file=new-archive.tar.gz ./files-i-want-to-archive In short, using tar does not inspire joy and it feels overcomplicated, no matter how you look at it, possibly either because creating archives is a complicated domain (though the zip tool might not necessarily support that claim), or because the tool has grown over time and no longer does just one thing and does it well.
In Ask HN: What are the best and worst command-line interfaces you have used?

Showing the 15 most recent of 21 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.