docker容器在运行install.sh脚本后无法启动



我正在使用这个docker-compose文件:

version: '3.8'
# Services
services:
# Nginx Service
nginx:
image: nginx:1.21
ports:
- 80:80
volumes:
- ./src:/var/www/php
- ./.docker/nginx/conf.d:/etc/nginx/conf.d
depends_on:
- php
# PHP Service
php:
build: ./.docker/php
working_dir: /var/www/php
volumes:
- ./src:/var/www/php
command: /bin/bash -c "./install.sh"
depends_on:
mysql:
condition: service_healthy
# MySQL Service
mysql:
image: mysql/mysql-server:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: demo
volumes:
- ./.docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
- mysqldata:/var/lib/mysql
healthcheck:
test: mysqladmin ping -h 127.0.0.1 -u root --password=$$MYSQL_ROOT_PASSWORD
interval: 2s
retries: 10
# PhpMyAdmin Service
phpmyadmin:
image: phpmyadmin/phpmyadmin:5
ports:
- 8080:80
environment:
PMA_HOST: mysql
depends_on:
mysql:
condition: service_healthy
# Volumes
volumes:
mysqldata:    

我试图运行一个bash脚本(install.sh)后创建的容器运行apt-get更新安装wget等,但php容器失败时,我试图运行它。我的bash脚本是:

#!/bin/bash
mkdir testdir && apt-get update && apt-get install wget -y

(这个文件在这里:./src/install.sh)

它正确地创建了文件夹,日志显示它正在尝试安装wget(但似乎从未完成),但容器从未正确启动。

如果我删除command: /bin/bash -c "./install.sh"行,一切正常工作(但没有安装wget)。

我已经尝试将命令移动到Dockerfile作为RUN命令,但它似乎从未运行

知道为什么会这样吗?

感谢

正如Hans Kilian在评论中所说,docker-compose命令取代CMD或ENTRYPOINT设置的任何内容。这些命令对于容器的运行是必需的,因此它除了安装wget之外什么都不做。

您似乎正在尝试运行位于"/install.sh下的文件,"这不是绝对路径。尝试使用文件的绝对路径运行命令,因为根据我的经验,dockerfiles不能识别每个命令之后的目录更改,所以:

RUN cd /xyz
RUN /bin/bash -c "./install.sh"

的结果不同
RUN /bin/bash -c "/xyz/install.sh"

(其中/xyz是install.sh所在的目录)

另外,确保文件被标记为可执行的chmod时,它被复制到您的容器。

然而,如果你想要做的只是创建一个目录并安装wget,我将简单地在Dockerfile中这样做:

RUN mkdir testdir
RUN apt-get update && apt-get install -y wget

最新更新