Create a docker group and place my user in it in MacOS - linux

Following Docker's installation instructions for Linux on a MacBook, since there isn't a dedicated page for MacOs, I am unable to create the docker group and assign myself to it:
sudo groupadd docker
sudo usermod -aG docker $USER
Since both groupadd and usermod commands are unidentified in mac.
What are the macOS alternatives?

The solution was found to be the dscl command.
And specifically:
sudo dscl . create /Groups/docker GroupMembership userName
with userName being the user I want to put in the docker group.

Related

Cannot connect to docker daemon in intellij in ubuntu with snap

In Intellij Ultimate docker is not detected automatically.
I choose "create new", but i get the message, that i cannot connect to docker daemon at unix /var/run/docker.sock
i started docker with: sudo snap docker start
The file docker.sock exists.
i added permission like it is said in other posts: sudo usermod -aG docker $USER and logged out and in again.
It does not help. What can i do?
I have the same problem. And I think that the snap package is not able to access /var/run/docker.sock
See
https://stackoverflow.com/a/69565328/351758

Not able to create a new folder in side etc in linux

I have been trying to create a folder in /etc in ubuntu 20.10 but it is showing
mkdir: cannot create directory ‘wiki’: Permission denied
the above error message. how to resolve this
Thanks!...
You need to have root permission to create document. Your current user doesn't have root privileges. You can use $sudo mkdir /etc/wiki to create folder.
Another option is to add your user to sudo group. For example, your user name is 'ubuntu' the you can execute the following command to add user to sudo group
$ sudo usermod -aG sudo ubuntu
To verify user belongs to Sudo Group
$ groups ubuntu
Output
ubuntu : ubuntu sudo
Once you have added your user(ubuntu) to Sudo group, you don't have to use sudo with every command.

How-to-fix-“username-is-not-in-the-sudoers-file.-This-incident-will-be-reported”

I want to enable the mod_rewrite on Apache, I used Putty to access the server on my windows OS.
I logged in using my username and password, My friend said that I should have root access to enable the mod_rewrite, so he advice me to type sudo su after I successfully log in. So I added sudo su command and it asked me a password again, so I type my password but I got an error.
[myusername] is not in the sudoers file.the incident will be reported
So maybe anyone here could help me.
You can add a new user into sudo group in debian based systems (Ubuntu, kbuntu, debian, etc) and the wheel group under RedHat based systems (RedHat, Fedora, CentOS, etc) by using the following commands
usermod -a -G sudo user
or
usermod -a -G wheel user
restart your machine
choose Advance ubuntu option
then go for the root option
you are now root here, root#machine:
enter: usermod -aG sudo username
now you have added the user to sudo group, you can exit from root and login as a user.
you can do this without restarting your machine if your root password is updated,
by default it is not but if not, then you have to restart and set the root password by passwd command.
But if you already have a root password setup
enter:
su -
and you will be root,
but recommended is to use:
sudo -s
as a temporary root access
It's necessary to add this user in a sudo group. You can do this, first, accessing the system using an admin user, next taking access to superuser mod:
sudo su
Then, you can add a user you need in a sudo group using the following commands:
adduser [username] sudo

Docker Busybox container add groups and user

I need users in my docker containers. My build is from the busybox image which is missing groupadd, I tried to add it using apt-get but that's also missing. What do I need to add to my Dockerfile to get groupadd?
So far I have
FROM busybox
RUN apt-get install bash
RUN groupadd -r postgres && useradd -r -g postgres postgres
CMD /bin/sh
You're trying to run Debian based command on a non-Debian system. If you need apt-get and other tools like that, you should change your base image with a FROM debian.
Busybox does include the addgroup with the following syntax:
/ # addgroup --help
BusyBox v1.24.2 (2016-03-18 16:38:06 UTC) multi-call binary.
Usage: addgroup [-g GID] [-S] [USER] GROUP
Add a group or add a user to a group
-g GID Group id
-S Create a system group

Switching users inside Docker image to a non-root user

I'm trying to switch user to the tomcat7 user in order to setup SSH certificates.
When I do su tomcat7, nothing happens.
whoami still ruturns root after doing su tomcat7
Doing a more /etc/passwd, I get the following result which clearly shows that a tomcat7 user exists:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
messagebus:x:101:104::/var/run/dbus:/bin/false
colord:x:102:105:colord colour management daemon,,,:/var/lib/colord:/bin/false
saned:x:103:106::/home/saned:/bin/false
tomcat7:x:104:107::/usr/share/tomcat7:/bin/false
What I'm trying to work around is this error in Hudson:
Command "git fetch -t git#________.co.za:_______/_____________.git +refs/heads/*:refs/remotes/origin/*" returned status code 128: Host key verification failed.
This is my Dockerfile, it takes an existing hudson war file and config that is tarred and builds an image, hudson runs fine, it just can't access git due to certificates not existing for user tomcat7.
FROM debian:wheezy
# install java on image
RUN apt-get update
RUN apt-get install -y openjdk-7-jdk tomcat7
# install hudson on image
RUN rm -rf /var/lib/tomcat7/webapps/*
ADD ./ROOT.tar.gz /var/lib/tomcat7/webapps/
# copy hudson config over to image
RUN mkdir /usr/share/tomcat7/.hudson
ADD ./dothudson.tar.gz /usr/share/tomcat7/
RUN chown -R tomcat7:tomcat7 /usr/share/tomcat7/
# add ssh certificates
RUN mkdir /root/.ssh
ADD ssh.tar.gz /root/
# install some dependencies
RUN apt-get update
RUN apt-get install --y maven
RUN apt-get install --y git
RUN apt-get install --y subversion
# background script
ADD run.sh /root/run.sh
RUN chmod +x /root/run.sh
# expose port 8080
EXPOSE 8080
CMD ["/root/run.sh"]
I'm using the latest version of Docker (Docker version 1.0.0, build 63fe64c/1.0.0), is this a bug in Docker or am I missing something in my Dockerfile?
You should not use su in a dockerfile, however you should use the USER instruction in the Dockerfile.
At each stage of the Dockerfile build, a new container is created so any change you make to the user will not persist on the next build stage.
For example:
RUN whoami
RUN su test
RUN whoami
This would never say the user would be test as a new container is spawned on the 2nd whoami. The output would be root on both (unless of course you run USER beforehand).
If however you do:
RUN whoami
USER test
RUN whoami
You should see root then test.
Alternatively you can run a command as a different user with sudo with something like
sudo -u test whoami
But it seems better to use the official supported instruction.
As a different approach to the other answer, instead of indicating the user upon image creation on the Dockerfile, you can do so via command-line on a particular container as a per-command basis.
With docker exec, use --user to specify which user account the interactive terminal will use (the container should be running and the user has to exist in the containerized system):
docker exec -it --user [username] [container] bash
See https://docs.docker.com/engine/reference/commandline/exec/
In case you need to perform privileged tasks like changing permissions of folders you can perform those tasks as a root user and then create a non-privileged user and switch to it.
FROM <some-base-image:tag>
# Switch to root user
USER root # <--- Usually you won't be needed it - Depends on base image
# Run privileged command
RUN apt install <packages>
RUN apt <privileged command>
# Set user and group
ARG user=appuser
ARG group=appuser
ARG uid=1000
ARG gid=1000
RUN groupadd -g ${gid} ${group}
RUN useradd -u ${uid} -g ${group} -s /bin/sh -m ${user} # <--- the '-m' create a user home directory
# Switch to user
USER ${uid}:${gid}
# Run non-privileged command
RUN apt <non-privileged command>
Add this line to docker file
USER <your_user_name>
Use docker instruction USER
You should also be able to do:
apt install sudo
sudo -i -u tomcat
Then you should be the tomcat user. It's not clear which Linux distribution you're using, but this works with Ubuntu 18.04 LTS, for example.
There's no real way to do this. As a result, things like mysqld_safe fail, and you can't install mysql-server in a Debian docker container without jumping through 40 hoops because.. well... it aborts if it's not root.
You can use USER, but you won't be able to apt-get install if you're not root.

Resources