docker-compose for Detached mode

DockerDocker Compose

Docker Problem Overview


I have following docker command to run container

docker run -d --name test -v /etc/hadoop/conf:/etc/hadoop/conf -v /usr/lib/python2.7/dist-packages/hdinsight_common:/usr/lib/python2.7/dist-packages/hdinsight_common -v /etc/hive/conf/:/etc/hive/conf/ -v /etc/tez/conf/:/etc/tez/conf/ -v /usr/hdp/2.4.2.0-258/sqoop/lib/:/usr/hdp/2.4.2.0-258/sqoop/lib/ -i -t hdinsight /bin/bash

This was to complicated so I was trying to create docker-compose file like this

version: '2'
services:
  hdinsight:
    image: hdinsight
    container_name: ABC
    volumes:
     - /etc/hadoop/conf:/etc/hadoop/conf
     - /usr/lib/python2.7/dist-packages/hdinsight_common:/usr/lib/python2.7/dist-packages/hdinsight_common
     - /etc/hive/conf/:/etc/hive/conf/
     - /etc/tez/conf/:/etc/tez/conf/
     - /usr/hdp/2.4.2.0-258/sqoop/lib/:/usr/hdp/2.4.2.0-258/sqoop/lib/
    entrypoint:
     - bash
    labels:
     - "HDInsight client VM"

But I am not sure where to pass -d, -i & -t flages from my original docker run command

I was running docker-compose like this

docker-compose -f docker-compose.yml run hdinsight

can anyone point me to right direction here ?

UPDATE after first answer

I tried to run docker-compose up -d

root@abc-docker:~/ubuntu# docker-compose up -d
Creating ABC
root@sbd-docker:~/ubuntu# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
ffa4c359abf7        hdinsight           "/bin/bash"         5 seconds ago       Exited (0) 5 seconds ago                       ABC
root@sbd-docker:~/ubuntu#

Dont know why its in Exited status

Any idea ?

Thanks

Docker Solutions


Solution 1 - Docker

You should scour the Compose file docs.

Most docker run commands have a compose equivalent, and they should all be listed there.

The background flag -d goes after run or up.

The tty flag -t and interactive flag -i are not required as docker-compose run does this by default. You can add tty to individual containers in the compose file with -t, but you cannot use interactive mode since you may start multiple containers at once and you can't interact with them all.

In regard to your situation the command you're using should be working. If you add -d after the run command it will run in the background. But I recommend using up instead of run, as it will simply start all containers in the file rather than you having to specify hdinsight.

Solution 2 - Docker

As said by Anand Suthar, you have to use tty: true and stdin_open: true. Here is a minimal example:

version: "3"
services:
  alpine1:
    image: alpine
    tty: true
    stdin_open: true

Start with:

docker-compose up -d

Attach to a container with:

docker attach 268bcfb650fb

and detach with ^P^Q.

Solution 3 - Docker

Today I am facing the same issue and below is how I manage.

> I add tty: true kay value & stdin_open: true key value in 'docker-compose.yml' file as below and I am sure it will run in detach mode and one can also interact with console.

version: '2'
services:
hdinsight:
image: hdinsight
container_name: ABC
volumes:
 - /etc/hadoop/conf:/etc/hadoop/conf
 - /usr/lib/python2.7/dist-packages/hdinsight_common:/usr/lib/python2.7/dist-packages/hdinsight_common
 - /etc/hive/conf/:/etc/hive/conf/
 - /etc/tez/conf/:/etc/tez/conf/
 - /usr/hdp/2.4.2.0-258/sqoop/lib/:/usr/hdp/2.4.2.0-258/sqoop/lib/
entrypoint:
 - bash
labels:
 - "HDInsight client VM"
tty: true
stdin_open: true

Solution 4 - Docker

From the Document

Usage: up [options] [--scale SERVICE=NUM...] [SERVICE...]

Options:
    -d, --detach               Detached mode: Run containers in the background,
                               print new container names. Incompatible with
                               --abort-on-container-exit.

docker-compose up doc

the command should be

docker-compose up -d 

Solution 5 - Docker

Rather than trying to attach to an existing container, this is now much easier using profiles introduced in 1.28.0.

Here's a basic example showing a normal service alongside a CLI container:

version: '3'

services:
  db:
    image: mariadb:10
    environment:
      - MARIADB_ROOT_PASSWORD=INSECURE
    volumes:
      - mariadb:/var/lib/mysql
    ports:
      - "3306:3306"

  cli:
    image: node:16
    user: node
    volumes:
      - .:/app
    environment:
      - DATABASE_URL=mysql://root:INSECURE@db/prisma
    working_dir: "/app"
    stdin_open: true
    tty: true
    command: bash
    profiles:
      - cli

volumes:
  mariadb:

After running docker-compose up -d, docker-compose run cli will give you a bash shell inside of the container.

For more complex apps, consider overriding the entrypoint. In the nodejs, world, if you set it to npx, and leave command undefined, you can then run arbitrary npx commands with docker-compose run npx .... And for common tasks that are always non-interactive, you can drop the std_open and tty lines while leaving the profile set.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionroyView Question on Stackoverflow
Solution 1 - DockerNauraushaunView Answer on Stackoverflow
Solution 2 - DockerOrtomala LokniView Answer on Stackoverflow
Solution 3 - DockerAnand SutharView Answer on Stackoverflow
Solution 4 - DockersheunglailiView Answer on Stackoverflow
Solution 5 - DockerdeviantintegralView Answer on Stackoverflow