SSD Nodes Learn Hosting plans →
Mwongozo Matt ConnorNa Matt Connor · Imeboreshwa 2026-08-03

Docker Compose: Tofauti ya stop na down ni ipi?

stop husimamisha na kuhifadhi containers; down huziondoa pamoja na network ya project. Hakuna inayofuta named volume bila kutumia flag ya volumes.

Jibu fupi

docker compose stop husimamisha containers na kuziacha kwenye disk. docker compose down huzisimamisha, kisha hufuta containers na network ambayo Compose iliunda kwa ajili ya project. Hakuna amri kati ya hizi inayogusa named volume. Database yako hufutika tu unapoongeza -v, kama ilivyo katika docker compose down -v, ambayo huondoa named volumes zilizotajwa katika sehemu ya volumes ya Compose file.

Hiyo ndiyo tofauti yote kwa aya moja. Mwongozo huu uliosalia unaithibitisha kwa Postgres volume unayoweza kufuatilia inapobaki baada ya down na kutoweka chini ya down -v, na unaeleza hali mbili ambazo unahitaji --force-recreate.

docker compose stop: kontena zinaendelea kuwepo

stop hutuma SIGTERM kwa mchakato mkuu katika kila kontena, husubiri, kisha hutuma SIGKILL ikiwa mchakato bado unaendelea. Muda wa kusubiri chaguo-msingi ni sekunde 10, na -t hubadilisha muda huo. Hakuna kitu kinachofutwa. Kontena huhifadhi ID yake, writable layer yake, IP reservation yake na logi zake.

docker compose stop
docker compose ps -a

docker compose ps peke yake huonyesha kontena zinazoendelea tu, kwa hiyo baada ya stop huonyesha jedwali tupu na watu hudhani kuwa kontena zimefutwa. ps -a hujumuisha kontena zilizosimamishwa, na hapo utaona Exited (0) kando ya kila huduma. Zirejeshe kwa docker compose start, ambayo hutumia tena kontena zilezile kabisa.

Kwa sababu kontena bado zipo, kila kitu kilichoandikwa ndani yake nje ya volume bado kipo. Hii inajumuisha package uliyosakinisha mwenyewe kwa kutumia docker compose exec, pamoja na configuration file uliyoihariri ndani ya kontena. Hii ndiyo sababu ya kiutendaji ya kupendelea stop wakati wa debugging: unaweza kuwasha tena huduma katika hali ileile.

docker compose down: containers na networks huondolewa

down husimamisha containers kisha huziondoa, pamoja na network chaguo-msingi ambayo Compose iliunda kwa mradi huo. Nyaraka za Docker zinaieleza kama amri ya kusimamisha containers na kuondoa containers, networks, volumes na images zilizoundwa na up. Hata hivyo, sehemu za volumes na images hutekelezwa tu unapoiomba kwa kutumia -v na --rmi.

docker compose down
docker compose ps -a
docker network ls

Baada ya down, ps -a haichapishi chochote kuhusu mradi huo, na network ya <project>_default haipo tena. Jina la mradi hutokana na jina la directory, isipokuwa ukiweka name: katika faili la Compose au upitishe -p. Kila mabadiliko uliyofanya ndani ya writable layer ya container hayawezi kurejeshwa tena. Kwa hiyo, ichukulie down kama amri inayotupa container na kuhifadhi data uliyoweka kwenye volumes.

Ukiitekeleza katika directory isiyo sahihi, utapata no configuration file provided: not found. Compose haijui ni mradi gani uliokusudia, hivyo inakataa kuendelea. Tumia docker compose -f /srv/myapp/compose.yaml down usipokuwa katika folder la mradi.

Je, docker compose down hufuta volumes zangu?

Hapana. Volume yenye jina iliyotangazwa chini ya key ya kiwango cha juu volumes huendelea kuwepo baada ya down, na huendelea kuwepo hata baada ya container iliyounganishwa nayo kuondolewa. Hili ndilo hofu linalotajwa zaidi kuhusu command hii, na jibu lake ni lilelile katika Compose v2.

Sanidi stack unayoweza kuifanyia majaribio. Weka maudhui haya kwenye compose.yaml ndani ya directory tupu inayoitwa voltest.

services:
  db:
    image: postgres:16.4
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

Iwashe, kisha uandike row utakayoitambua baadaye.

docker compose up -d
sleep 10
docker compose exec -T db psql -U postgres -c "create table marker (note text);"
docker compose exec -T db psql -U postgres -c "insert into marker values ('survived');"

Sasa ondoa container na ukague volume.

docker compose down
docker volume ls

Output bado inaorodhesha voltest_pgdata. Container imeondolewa, lakini data haijaondolewa. Rudisha stack na usome row hiyo.

docker compose up -d
sleep 10
docker compose exec -T db psql -U postgres -c "select * from marker;"

Utapata row moja iliyo na survived. Container mpya ni container tofauti yenye ID tofauti, lakini imeunganishwa kwenye volume ileile. Ikiwa unataka maelezo mapana zaidi, mwongozo wa misingi ya Compose unaeleza tofauti kati ya volumes zenye majina na bind mounts, pamoja na mahali ambapo kila moja huhifadhiwa kwenye host.

Kile ambacho down -v huharibu, hasa

-v (kwa jina kamili --volumes) huondoa volumes zilizopewa majina na kutangazwa katika sehemu ya volumes ya faili ya Compose, pamoja na volumes zisizo na majina zinazohusishwa na containers. Iendeshe dhidi ya stack hiyo hiyo.

docker compose down -v
docker volume ls

voltest_pgdata haijaorodheshwa tena. Anzisha stack tena, kisha entrypoint ya Postgres hukuta data directory tupu na kuanzisha cluster mpya. Log ya container inaeleza hilo wazi.

The files belonging to this database system will be owned by user "postgres".
PostgreSQL init process complete; ready for start up.

Ukiona block hiyo kwenye stack ambayo imekuwa ikiendesha kwa miezi kadhaa, inamaanisha volume imeondolewa. Jedwali lako la marker limepotea, na njia pekee ya kulirejesha ni kutumia backup.

Baadhi ya storage haziondolewi kamwe na -v. Bind mount ni path ya host, kwa hiyo Docker huitenganisha tu na files zako hubaki mahali pake. Volume iliyowekwa alama external: true hutangazwa kuwa ni ya kitu kilicho nje ya project hii, na Compose haiiondoi kamwe. Named volume ambayo uliifuta kwenye faili ya Compose kabla ya kuendesha down -v haitangazwi tena, kwa hiyo Compose haijui kwamba inapaswa kuiondoa na huiacha kama orphan kwa docker volume prune.

Hali hiyo ya mwisho huwasumbua watu wakati wa kufanya refactor. Ondoa service na volume yake kwenye faili, kisha endesha down -v; volume itaendelea kuwepo kwa sababu faili haitaji tena. Endesha down -v kabla ya kuhariri faili, si baada ya hapo.

Wakati unaohitaji kwa kweli --force-recreate

docker compose up -d haijengi upya kila kitu kila mara. Compose huhifadhi hash ya usanidi uliotatuliwa wa kila service kwenye container kama label. Ikiwa hash inalingana na image ID inalingana, container huachwa bila kubadilishwa na unapata Container voltest-db-1 Running badala ya Recreated. Hii ndiyo tabia unayohitaji karibu kila mara, kwa sababu hufanya up -d iwe salama kuendesha mara kwa mara.

Hii pia ndiyo sababu baadhi ya mabadiliko huonekana kutofanya chochote. Compose huhesabu hash ya service definition iliyotatuliwa, si maudhui ya files ambayo definition hiyo inaelekeza. Config file iliyomountiwa ndani ya container na kusomwa mara moja wakati wa kuanza haitasababisha recreate unapoibadilisha, kwa sababu mount path haijabadilika. Service huendelea kufanya kazi kwa values ilizosoma wakati wa boot.

docker compose up -d --force-recreate

Hii husimamisha na kuondoa kila container, kisha huunda container mpya kutoka kwenye definition ileile. Itumie baada ya kuhariri mounted config file, na wakati container imeingia katika hali ambayo huwezi kuieleza. Volumes haziguswi, kwa hiyo database huendelea kuwepo baada ya force recreate. Ili kutumia image mpya zaidi yenye tag ileile, unahitaji pia pull.

docker compose pull
docker compose up -d

pull huchukua image ID mpya, kisha up -d huona kuwa image ID ni tofauti na ya container inayoendesha na huirecreate yenyewe. Kuongeza --force-recreate bila pull hukupa container mpya kutoka kwenye image ileile ya zamani. Ndiyo sababu malalamiko ya “nilifanya force recreate lakini bado ni version ya zamani” hutokea mara nyingi.

docker compose restart haifanyi lolote kati ya hayo. Huanzisha upya containers zilizopo na haisomi tena Compose file kabisa, kwa hiyo environment variable iliyobadilishwa au port mapping iliyobadilishwa haitatumika. Ikiwa ulihariri file, tumia up -d.

Dhana ya msingi ya kukumbuka

Containers zinaweza kubadilishwa. Container ni mchakato pamoja na layer nyembamba inayoweza kuandikwa, na Compose inaweza kuunda nyingine inayofanana kabisa kutoka kwenye file ndani ya takribani sekunde moja. Volumes haziwezi kubadilishwa, kwa sababu zinashikilia nakala pekee ya state ambayo hakuna file katika repository yako inaweza kuzalisha upya.

Kila amri ya Compose inalingana na mgawanyo huo. stop na start huhifadhi container. down na up hubadilisha container na kuhifadhi volume. down -v ndiyo amri pekee ya kawaida inayoondoa state, ndiyo sababu inahitaji flag iliyoainishwa wazi. Kabla hujaiandika kwenye mfumo halisi, thibitisha kuwa una backup ambayo umeirejesha angalau mara moja.

Mantiki hiyo hiyo inatumika kwa secrets. Password iliyowekwa kupitia POSTGRES_PASSWORD husomwa mara ya kwanza tu database inapoanzishwa, kwa hiyo kuibadilisha kwenye environment file na kuendesha up -d hukupa password authentication failed for user "postgres". Container ni mpya na volume ni ya zamani, na volume ya zamani bado inashikilia password ya zamani. Jinsi Compose inavyotatua environment files na secrets inaeleza ni layer ipi hutangulia wakati variable hiyo hiyo imewekwa mara mbili.

Aina za hitilafu na mifuatano utakayoiona

no configuration file provided: not found inamaanisha kwamba Compose inaendeshwa kwenye directory isiyo na compose.yaml wala docker-compose.yml. Tumia -f pamoja na full path.

network voltest_default has active endpoints kwenye down inamaanisha kwamba container iliyo nje ya project imeunganishwa kwenye project network. Kwa kawaida, container hiyo ilianzishwa kwa mkono kwa kutumia docker run --network. Ondoa container hiyo, kisha endesha down tena.

Found orphan containers ([voltest-old-1]) for this project huonekana baada ya kubadilisha jina au kufuta service. Container ya zamani bado ina project label. docker compose down --remove-orphans huziondoa, na ni salama kuiendesha kwenye stack inayofanya kazi vizuri.

Error response from daemon: remove voltest_pgdata: volume is in use kwenye docker volume rm ya manual inamaanisha kwamba bado kuna container inayorejelea volume hiyo, hata ikiwa container hiyo imesimamishwa. Endesha docker compose down kwanza, kisha ondoa volume, au tumia down -v tu. Kwenye project kubwa, stack ya Compose yenye services nyingi inaonyesha idadi ya volumes ambazo project moja inaweza kukusanya.

FAQ

Je, docker compose down hufuta database yangu?

Hapana, ikiwa database iko kwenye named volume au bind mount. down huondoa containers na project network, huku volume ikibaki kwenye diski pamoja na data yake. docker compose up -d inayofuata huunganisha container mpya kwenye volume hiyo hiyo, na data hupatikana. docker compose down -v pekee ndiyo huondoa named volumes, na ni zile tu zilizotajwa katika sehemu ya volumes ya faili la Compose.

Kuna tofauti gani kati ya stop na down kwa container ninayotaka kuitumia tena?

stop huhifadhi container, kwa hiyo docker compose start hukurudisha kwenye container hiyo hiyo ikiwa na writable layer ile ile. Kila kitu ulichosakinisha au kuhariri mwenyewe ndani ya container bado kinapatikana. down hufuta container, kwa hiyo up -d inayofuata huunda mpya kutoka kwenye image, na mabadiliko hayo ya mkono hupotea. Unapofanya debugging, tumia stop.

Ninaondoaje kila kitu kilichoundwa na project ya Compose?

docker compose down -v --rmi all --remove-orphans huondoa containers, project network, named volumes zilizotajwa kwenye faili, images zilizotumiwa na services, na container yoyote ambayo bado ina label ya jina la project. Haigusi bind mounts au volumes zilizowekewa alama ya external: true. Kagua utakachopoteza kwa kutumia docker volume ls kabla ya kuiendesha.

Kwa nini container yangu haizingatii mabadiliko niliyofanya kwenye faili la config lililomountiwa?

Compose huamua ikiwa itaunda upya container kwa kulinganisha hash ya service definition iliyotatuliwa. Hash hiyo haijumuishi maudhui ya faili lililomountiwa. Path haikubadilika, kwa hiyo Compose huacha container ikiendelea kutumia values ilizosoma wakati wa kuanza. Endesha docker compose up -d --force-recreate ili kuunda container mpya itakayosoma faili hilo tena.

Kwa nini POSTGRES_PASSWORD yangu mpya haifanyi kazi baada ya kuibadilisha?

Image ya Postgres husoma POSTGRES_PASSWORD tu inapoanzisha data directory tupu. Volume yako tayari ina cluster iliyowahi kuanzishwa, kwa hiyo variable hiyo hupuuzwa na password ya zamani bado hutumika. Utaona password authentication failed for user "postgres". Badilisha password kwa kutumia ALTER USER ndani ya database inayoendelea kufanya kazi, au ukubali kupoteza data na uanze upya kwa docker compose down -v.