Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DockerFile : how to get bash command line after start?

This question is not duplicated, because I want to obtain an interactive shell without running with -it flags.

I'm moving first steps into Docker to create images only for internal use.

I start from this envirornment_full.df:

FROM ubuntu:16.04
ENTRYPOINT ["/bin/bash"]

I then build

docker rmi environment:full
docker build -t environment:full  -f environment.df .

Then run

docker run environment:full

Running docker images -am I see my image

REPOSITORY          TAG                 IMAGE ID            CREATED         SIZE
environment         full                aa91bbd39167        4 seconds ago   129 MB

So I run it

docker run environment:full 

I see nothing happening ....

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED         STATUS                      PORTS               NAMES
5847c0a18f30        environment:full    "/bin/bash"         21 seconds ago  Exited (0) 20 seconds ago                       admiring_mirzakhani

Also

$ docker run environment:full -ti
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
root@aa768a585f33:/# exit

I'd like to have the ubuntu prompt, like if I was in a SSH connection. And this without user must enter -i or -tty flags.

How can I realize this?

like image 910
realtebo Avatar asked Dec 20 '25 06:12

realtebo


1 Answers

bash won't run at all if stdin is closed. If you don't provide the -i flag, bash will simply exit immediately. So when you...

docker run environment:full 

...bash exits immediately, and so your container exits. You would see it if you ran docker ps -a, which shows container that have stopped.

bash won't give you an interactive prompt if it's not attached to a tty. So if you were to run...

coerk run -i environment:full

...you would get a bash shell, but with no prompt, or job control, or other features. You need to provide -t for Docker to allocate a tty device.

You can't get what you want without providing both the -i and -t options on the command line.

An alternative would be to set up an image that runs an ssh daemon, and have people ssh into the container. Instead of behaving "like if I was in a SSH connection", it would actually be an ssh session.

Also, note that this:

docker run environment:full -ti

Is not the same as this:

docker run -it environment:full

The former will run bash -ti inside a container, while the latter passes the -i and -t options to docker run.

like image 117
larsks Avatar answered Dec 22 '25 00:12

larsks



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!