簡體   English   中英

Docker-Compose入口點/命令

[英]Docker-Compose Entrypoint/Command

我正在嘗試使用現有的docker.compose.yaml文件將軟件包(nano)添加到容器中。 我可以讓它在部署后運行腳本,但是由於某種原因,它會不斷循環運行腳本。 這是預期的目的嗎? TBH我是整個docker-compose.yaml設置的新手,所以我不知道這是否是我應該做的!

我試過更改命令:的入口點:但我遇到同樣的問題。

version: '3.4'

services:
  nextcloud:
    image: nextcloud
    container_name: "nextcloud"
    restart: always
    ports:
      - 8080:80
    volumes:
      - /dconfig/nextcloud/data:/var/www/html/data
      - /dconfig/nextcloud/config:/var/www/html/config
    network_mode: "bridge"
    environment:
      - TZ=Europe/London
      - PGID=1000
      - PUID=1000
    command: /var/www/html/config/install.sh

install.sh

#!/bin/sh
apt-get update
apt-get install -y smbclient nano

Docker容器僅運行一個命令,當該命令完成后,容器退出。 如果容器沒有入口點,則使用以下command: docker-compose.yml中的命令, Dockerfile docker run命令中映像名稱之后的任何參數,或DockerfileCMD 如果它確實有一個入口點( entrypoint:docker run --entrypoint ...ENTRYPOINT ),則是入口點,它將作為參數傳遞命令。

簡而言之:如果您在docker-compose.yml傳遞了一個入口點或命令,它將被運行, 而不是容器通常將運行的服務器。 沒有簡單的Docker方法可以在主進程之前或之后運行“ hook”。

在您的特殊情況下,在啟動時將軟件安裝到容器中是一種反模式:每次容器啟動時都必須重復此過程,如果外部軟件包存儲庫關閉,則啟動可能會失敗。 您可以在Dockerfile docker-compose.yml目錄中編寫一個非常簡單docker-compose.yml

FROM nextcloud
RUN apt-get update \
 && apt-get install smbclient

docker-compose.yml ,將image:行改為

services:
 nextcloud:
   build: .  # instead of image:

(就樣式而言,我不會顯式設置container_name:network_mode: :,此處的Docker Compose默認值很好。我也不會在容器中安裝nano或任何其他文本編輯器,因為您在本地進行的任何更改都會重新啟動容器后立即丟失。雖然您仍在調試映像,但我也會推遲restart: always規格,盡管一旦您確信所有功能都可以正常運行就可以了。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM