use*_*449 6 command docker docker-compose
我正在尝试使用我现有的 docker.compose.yaml 文件将包(nano)添加到容器中。我可以让它在部署后运行脚本,但由于某种原因它不断循环脚本。这是预期的目的吗?TBH 我对整个 docker-compose.yaml 设置还很陌生,所以我不知道这是否是我应该做的!
我试过更改 command: for entrypoint: 但我遇到了同样的问题。
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
Run Code Online (Sandbox Code Playgroud)
安装文件
#!/bin/sh
apt-get update
apt-get install -y smbclient nano
Run Code Online (Sandbox Code Playgroud)
Dav*_*aze 14
一个 Docker 容器只运行一个命令,当该命令完成时,容器退出。如果容器没有入口点,则它是command:from docker-compose.yml、docker run命令中图像名称后的任何参数,或CMDfrom Dockerfile。如果它确实有一个入口点 ( entrypoint:, docker run --entrypoint ..., ENTRYPOINT),它就是入口点,它将命令作为参数传递。
简而言之:如果您在 中传递入口点或命令docker-compose.yml,它将运行而不是容器通常运行的服务器。没有简单的 Docker 方法可以在主进程之前或之后运行“钩子”。
在您的特定情况下,在启动时将软件安装到容器中是一种反模式:每次容器启动时都必须重复,如果外部包存储库关闭,启动可能会失败。您可以Dockerfile在与以下内容相同的目录中编写一个非常简单的docker-compose.yml:
FROM nextcloud
RUN apt-get update \
&& apt-get install smbclient
Run Code Online (Sandbox Code Playgroud)
在docker-compose.yml, 换image:行说
services:
nextcloud:
build: . # instead of image:
Run Code Online (Sandbox Code Playgroud)
(就风格而言,我不会设置container_name:或network_mode:明确,此处的 Docker Compose 默认值很好。我也不会nano在容器中安装或任何其他文本编辑器,因为您在本地所做的任何更改都会在您重新启动容器。虽然您仍在调试映像restart: always,但我也会推迟制定规范,尽管一旦您更加确信一切正常,这是合理的。)
| 归档时间: |
|
| 查看次数: |
18000 次 |
| 最近记录: |