นักเทียบท่าเขียนขึ้นสำหรับภาชนะบางอย่างเท่านั้น


161

ฉันมีdocker-compose.ymlที่บรรจุหลาย สามตัวสำหรับแอพของฉัน (ไคลเอนต์เซิร์ฟเวอร์และฐานข้อมูล) และส่วนที่เหลือเป็นเครื่องมือ dev ต่าง ๆ (เช่น psql, npm, Manage.py, ฯลฯ ) เมื่อฉันdocker-compose upเริ่มต้นทั้งหมด แต่ฉันต้องการให้เริ่มหลักสามหลักเท่านั้น เนื่องจากลิงก์ที่ฉันระบุไว้ฉันสามารถเริ่มได้ทั้งสามด้วยdocker-compose up clientแต่จากนั้นเอาต์พุตจะมาจากคอนเทนเนอร์เดียวเท่านั้น ดังนั้นมีวิธีการทำอย่างใดอย่างหนึ่งต่อไปนี้:

  1. บอกนักเทียบท่าเขียนว่าคอนเทนเนอร์ใดควรเริ่มต้นด้วย docker-compose up
  2. รับเอาต์พุตจากคอนเทนเนอร์ที่เชื่อมโยงทั้งหมดจาก docker-compose up client

1
ตามเอกสาร: docker-compose up [options] [SERVICE...]ช่วยให้คุณเริ่มบริการย่อยที่คุณสนใจในรายการ
Jesse Chisholm

คำตอบ:


257

คุณสามารถเริ่มคอนเทนเนอร์โดยใช้:

$ docker-compose up -d client

สิ่งนี้จะเรียกใช้คอนเทนเนอร์ในเบื้องหลังและเอาต์พุตจะพร้อมใช้งานจาก

$ docker-compose logs

และมันจะประกอบไปด้วยคอนเทนเนอร์ที่คุณสตาร์ทไว้ทั้งหมด


11
สมบูรณ์ เพียงแค่ปล่อยธง -d ถ้าคุณต้องการที่จะเห็นบันทึกสะท้อนให้เห็นถึง stdout
Natus Drew

เป็นไปได้ไหมที่จะเริ่มต้น container ที่พึ่งพาถ้า container ที่พึ่งพานั้นกำลังทำงานอยู่และฉันไม่ต้องการที่จะรีสตาร์ทมัน?
majTheHero

43

ในการเริ่มบริการเฉพาะที่กำหนดไว้ในไฟล์นักเทียบท่าของคุณ ตัวอย่างเช่นหากคุณมี docker-compose.yml

sudo docker-compose start db  

ได้รับไฟล์เขียนเช่น:

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:

บางครั้งคุณต้องการเริ่ม mySQL เท่านั้น (บางครั้งคุณแค่ต้องการเติมฐานข้อมูล) ก่อนที่จะเริ่มชุดทั้งหมดของคุณ


9
ทำไมsudoก่อนdocker-compose ...? นั่นไม่จำเป็นใช่มั้ย
Jochem Schulenklopper

1
หากคุณไม่มีผู้ใช้ของคุณในกลุ่มนักเทียบท่าใช่มันจำเป็น
delpo

ความแตกต่างคืออะไรถ้าฉันใช้ sudo docker-compose up db แทนsudo docker-compose start db
Luk Aron

3
@LukAron - startสมมติว่าคอนเทนเนอร์นั้นมีอยู่แล้วและเพิ่งจะเริ่มupจะดึงภาพถ้าจำเป็นสร้างคอนเทนเนอร์ถ้าจำเป็นจากนั้นเริ่มคอนเทนเนอร์
Jesse Chisholm


4

ทางออกที่ดีวิธีหนึ่งคือใช้งานบริการที่ต้องการเช่นนี้:

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

และไฟล์ services.txt มีลักษณะดังนี้:

services1 services2, etc

แน่นอนถ้าการพึ่งพา (depend_on) จำเป็นต้องเรียกใช้บริการที่เกี่ยวข้องด้วยกัน

- บิลด์เป็นทางเลือกตัวอย่างเช่น


0

ตั้งแต่docker-composev1.5เป็นไปได้ที่จะส่งdocker-compose.ymlไฟล์หลายไฟล์ด้วย-fแฟล็ก สิ่งนี้ช่วยให้คุณสามารถแยกเครื่องมือ dev ของคุณออกเป็นส่วนแยกdocker-compose.ymlซึ่งคุณจะรวมเฉพาะตามความต้องการ:

# 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

สำหรับการอภิปรายในเชิงลึกเกี่ยวกับเห็นนี้นักเทียบท่า / เขียน # 1896

ฉันได้สร้างคำขอดึงเพื่อเพิ่มฟังก์ชันการทำงานเพื่อให้บรรลุสิ่งนี้ด้วยความสะดวกสบายมากขึ้น ( นักเทียบท่า / เขียน # 7548 ) แต่เนื่องจากต้องมีการเปลี่ยนแปลงข้อมูลจำเพาะไฟล์เขียนซึ่งตอนนี้มีการกล่าวถึงที่compose-spec / compose-spec # 87 .


-1

โดยปกติคุณไม่ต้องการทำสิ่งนี้ ด้วย Docker Compose คุณจะกำหนดบริการที่ประกอบแอปของคุณ npmและmanage.pyเป็นเพียงคำสั่งการจัดการ คุณไม่ต้องการภาชนะสำหรับพวกเขา ถ้าคุณต้องการพูดสร้างตารางฐานข้อมูลของคุณด้วยmanage.pyสิ่งที่คุณต้องทำคือ:

docker-compose run client python manage.py create_db

ลองคิดดูสิว่า Heroku ใช้พลังครั้งเดียว

หากคุณต้องการใช้คำสั่งการจัดการเหล่านี้เป็นคอนเทนเนอร์แยกต่างหาก (และใช้ Docker Compose สำหรับสิ่งเหล่านี้) คุณสามารถสร้าง.ymlไฟล์แยกต่างหากและเริ่ม Docker Compose ด้วยคำสั่งต่อไปนี้:

docker-compose up -f my_custom_docker_compose.yml

15
ผู้คนจำนวนมากต้องการทำเช่นนี้
kojiro

8
@ msrd0 ปกติแล้วคุณไม่ต้องการทำสิ่งนี้? ปล่อยให้คนตัดสินใจด้วยตัวเอง!
กริช

1
ควรมีกฎในการที่คุณไม่สามารถลงคะแนนโดยไม่อธิบายว่าทำไม เพราะนี่ (หรืออย่างน้อยส่วนแรก) เหมาะสมที่สุดการมีคอนเทนเนอร์เพิ่มเติมสำหรับทุกคำสั่งการจัดการที่เป็นไปได้นั้นแปลกมาก
thclark
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.