How to run commands out of docker container

Profile picture for user a.berramou
Azz-eddine BERRAMOU 12 March, 2021

It's annoying each time you need to run a command you should enter to the container before.

How to run commands without entering to your docker container ?

For exemple to run composer install in the normal case you need to run the following: 

$ docker exec -it docker-CONTAINER_NAME  /bin/bash
# Now you are inside container you can run 
$ composer install

So let's make life easy and change those two commandes by one alias:

  1. First thing we need is install this beautiful library smartcd and configure it like the following
    $ git clone
    $ cd smartcd 
    $ make install
    $ source load_smartcd
    # Accept all with typing Y
    $ smartcd config
  2.  Second thing is to create necessary file to work with smartcd, in your project add the following files:
    for demonstration purposes i will create create some alias like composer and drush you can add as much as you want of alias in the same way.  
    .bash_enter file
    _alias_dc() { docker-compose $@;}
    _alias_run() { docker-compose run --rm $@;}
    _alias_php() { docker-compose run --rm --user YOUR_USER --workdir=/WORKDIR_PATH CONTAINER_NAME php $@;}
    _alias_composer() { docker-compose run --rm --user YOUR_USER --workdir=/WORKDIR_PATH CONTAINER_NAME composer $@;}
    _alias_drush() { docker-compose run --rm --user YOUR_USER --workdir=/WORKDIR_PATH CONTAINER_NAME vendor/drush/drush/drush $@;}
    ALIAS_FUNCTIONS=(_alias_dc _alias_run _alias_php _alias_composer _alias_drush)
    if [ -z "$BASH_ENTER_ALIAS_ONLY" ]; then echo "Commands: "; fi
    for func in $ALIAS_FUNCTIONS
      autostash alias $(sed -r 's/^_?alias_//' <<< "${func}")="${func}"
      if [ -z "$BASH_ENTER_ALIAS_ONLY" ]; then echo " - $(sed -r 's/^_?alias_//' <<< "$func")"; fi

    .bash_leave file

    ALIAS_FUNCTIONS=$(declare -F | sed -r 's/^declare -f //' | awk -F= '/^_?alias_/{print $1 }')
    for func in $ALIAS_FUNCTIONS
       do unset -f $func
  3. Now all you need to do is open your terminal and go to your project root folder you will find all the alias declared in the .bash_enter file ready to go. 
    now you can run composer install without entering to container.

For more information read about smartcd here especially the part of HOW DOES IT WORK?