this post was submitted on 23 Dec 2024
11 points (66.7% liked)

Linux

48691 readers
787 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

I thought this would be hard, but turns out the following oneliner does it, with maybe no sideeffects ?

echo 'docker() { [ "$1" = "sh" ] && docker exec -it "$2" sh || command docker "$@"; }' >> ~/.bashrc && source ~/.bashrc

This creates a bash alias for "docker ps" , every other command should run as normal

Now I just need to remember to run this one liner on every single computer I use in the future...

top 13 comments
sorted by: hot top controversial new old
[–] [email protected] 27 points 2 days ago* (last edited 2 days ago) (1 children)
dit="docker exec -it $@"

Seems more flexible to me. Also, you shouldn't give functions or variables the same names as binaries.

[–] gamma 5 points 1 day ago

The "$@" doesn't do that you think it does in an alias. It gets expanded on alias creation.

[–] [email protected] 16 points 2 days ago (1 children)

Not all docker containers contain a shell binary.. You can still propose an issue to moby, the upstream of docker, though.

[–] [email protected] 0 points 2 days ago (2 children)

How do you go inside those containers and poke around then ?

[–] [email protected] 34 points 2 days ago (1 children)

That's the neat thing, you don't

Jokes aside, you create a custom Dockerfile and copy a statically compiled shell binary.

[–] [email protected] 1 points 2 days ago (1 children)

Always wondered why this wasn’t automated, from an ergonomics perspective, a command that lets me open a shell could detect that no shell exists, and then do as you said, without me having to lift a finger. It’s not very unix-y, but it could be a sort of plug-in for Docker CLIs.

[–] nous 3 points 2 days ago (1 children)
[–] [email protected] 4 points 2 days ago (1 children)

Note

Docker Debug requires a Pro, Team, or Business subcription.

I don't know if that applies to me but big yikes!

[–] nous 2 points 2 days ago (1 children)

Oh, misses that bit... Seems there is a third party plugin that does something similar.

[–] [email protected] 1 points 1 day ago

Now that is more what I had in mind! I’ll definitely be using this, thanks

[–] nous 9 points 2 days ago

Generally speaking you shouldn't be poking around running containers. It is rare that I have ever needed to do that. If you want to inspect the contents of an image then tools like dive are helpful. If the container produces some useful output that you might need then put that into a volume, you can then mount that volume to a debug/inspect container to read the files without messing around with the rest of the container.

Shell-less containers are a great security feature - it is extremely hard to get a reverse shell on something that does not have any shell. And if you must have a shell to debug something docker already has a feature for that docker debug which works for shell-less containers as well.

[–] [email protected] 7 points 2 days ago* (last edited 2 days ago)

This is an excellent idea. Fortunately you're not the first to have it ;-)

You should look into alias.

[–] [email protected] 4 points 2 days ago

Oof freebsd has spoilt me, the equivalent would be appjail login vaultwarden