docker-componer solo para ciertos contenedores

161

Tengo una docker-compose.ymlque contiene varios contenedores. Tres de ellos son para mi aplicación (cliente, servidor y base de datos) y el resto son para varias herramientas de desarrollo (por ejemplo, psql, npm, manage.py, etc.). Cuando lo hago, docker-compose uptodos comienzan, pero solo quiero que comiencen los tres principales. Debido a los enlaces que he especificado, puedo comenzar solo con esos tres, docker-compose up clientpero luego la salida es solo de ese contenedor. Entonces, ¿hay alguna manera de hacer uno de los siguientes:

  1. Indique a docker-compose qué contenedores deben comenzar por docker-compose up
  2. Obtenga resultados de todos los contenedores vinculados de docker-compose up client
aquavitae
fuente
1
Según los documentos: le docker-compose up [options] [SERVICE...]permite iniciar cualquier subconjunto de servicios que desee enumerar.
Jesse Chisholm

Respuestas:

258

Puede iniciar contenedores utilizando:

$ docker-compose up -d client

Esto ejecutará contenedores en segundo plano y la salida estará disponible desde

$ docker-compose logs

y consistirá en todos sus contenedores iniciados

wsl
fuente
11
Perfecto. Simplemente suelte la bandera -d si desea ver los registros con eco en stdout
Natus Drew
¿Es posible iniciar un contenedor dependiente si el contenedor de dependencia ya se está ejecutando y no quiero reiniciarlo?
majTheHero 01 de
43

Para iniciar un servicio particular definido en su archivo docker-compose. por ejemplo si tienes un docker-compose.yml

sudo docker-compose start db  

dado un archivo de composición como:

version: '3.3'

services:
   db:
     image: mysql:5.7
     ports:
       - "3306:3306"
     volumes:
       - ./db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: yourPassword
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: yourPassword

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "80:80"
     volumes:
       - ./l3html:/var/www/html
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: yourPassword
volumes:
    db_data:
    l3html:

Algunas veces, solo desea iniciar mySQL (a veces solo desea llenar una base de datos) antes de iniciar todo su conjunto.

Hugo R
fuente
9
¿Por qué el sudoantes docker-compose ...? Eso no es necesario, ¿verdad?
Jochem Schulenklopper
1
si no tiene su usuario en el grupo de acopladores sí, sería necesario.
delpo
cuál es la diferencia si uso en sudo docker-compose up db lugar desudo docker-compose start db
Luk Aron
3
@LukAron: startsupone que el contenedor ya existe y solo lo inicia, upextraerá imágenes si es necesario, creará contenedores si es necesario y luego iniciará el contenedor.
Jesse Chisholm
10

Oh, solo con esto:

$ docker-compose up client server database
rappongy
fuente
4

Una buena solución es ejecutar solo los servicios deseados como este:

docker-compose up --build $(<services.txt)

y el archivo services.txt tiene este aspecto:

services1 services2, etc

por supuesto, si la dependencia (depende de), necesita ejecutar servicios relacionados juntos.

--build es opcional, solo por ejemplo.

matinfo
fuente
0

Desde docker-composev1.5 es posible pasar múltiples docker-compose.ymlarchivos con la -fbandera . Esto le permite dividir sus herramientas de desarrollo en una separada docker-compose.ymlque luego solo incluye a pedido:

# start and attach to all your essential services
docker-compose up

# execute a defined command in docker-compose.dev.yml
docker-compose -f docker-compose.dev.yml run npm update

# if your command depends_on a service you need to include both configs
docker-compose -f docker-compose.yml -f docker-compose.dev.yml run npm update

Para una discusión en profundidad sobre esto, ver docker / compose # 1896 .

He creado una solicitud de extracción para agregar una funcionalidad para lograr esto con mucha más comodidad ( docker / compose # 7548 ) pero como esto requiere un cambio en la especificación del archivo compose, esto ahora se discute en compose-spec / compose-spec # 87 .

acran
fuente
-1

Usualmente no quieres hacer esto. Con Docker Compose, usted define los servicios que componen su aplicación. npmy manage.pyson solo comandos de gestión. No necesitas un contenedor para ellos. Si necesita, por ejemplo, crear sus tablas de base de datos manage.py, todo lo que tiene que hacer es:

docker-compose run client python manage.py create_db

Piense en ello como el dynos único que usa Heroku.

Si realmente necesita tratar estos comandos de administración como contenedores separados (y también usar Docker Compose para estos), puede crear un .ymlarchivo separado e iniciar Docker Compose con el siguiente comando:

docker-compose up -f my_custom_docker_compose.yml
linkyndy
fuente
15
Mucha gente quiere hacer esto.
kojiro
8
@ msrd0 ¿Generalmente no quieres hacer esto? ¡Deje que la gente decida por sí misma!
Kris
1
Debería haber una regla sobre SO que no se puede votar sin explicar por qué. Debido a que esto (o al menos la primera parte) tiene más sentido, tener un contenedor adicional para cada comando de administración posible es muy extraño.
thclark