[英]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
命令中映像名稱之后的任何參數,或Dockerfile
的CMD
。 如果它確實有一個入口點( 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.