gpt4 book ai didi

php - Docker compose 命令没有这样的文件

转载 作者:行者123 更新时间:2023-12-02 18:09:41 24 4
gpt4 key购买 nike

我一直在尝试将我的 php wev 应用程序(基于 laravel 构建)容器化,但我遇到了一些问题

首先我发现容器在执行命令后退出所以我将构建脚本移动到不同的容器(迁移和 Composer 安装)

我制作了一个名为 init.sh 的脚本,其中包含构建指令,但是每当我从 docker-compose.yml 中的 command 运行它们时,我都没有得到这样的文件或者目录。

这是我的dockerfile

FROM nimmis/apache-php7


COPY apache_default /etc/apache2/sites-available/000-default.conf

RUN a2enmod rewrite

RUN service apache2 restart

这是我的 docker-compose.ym

version: "3"

volumes:
db-data:
external: false

services:
db:
image: mysql/mysql-server
env_file: .env
volumes:
- db-data:/var/lib/mysql-server

migrations:
build: .
env_file: .env
volumes:
- .:/var/www/html/books
depends_on:
- app
command:
# - /var/www/html/books/artisan migrate
# - chmod 777 /var/www/html/init.sh
- /var/www/html/books/init.sh
# - /var/www/html/init.sh
environment:
- ALLOW_OVERRIDE=true

app:
build: .
env_file: .env
volumes:
- .:/var/www/html/books
ports:
- "8081:80"
depends_on:
- db
environment:
- ALLOW_OVERRIDE=true

注释部分尝试正确运行脚本。

我正在尝试使用 docker 工具箱在 Windows 10 上运行它

我做错了什么?这是正确的方法吗?

最佳答案

RUN 指令将在容器构建时执行容器中的某些内容,而不是在容器执行时执行。

为此,您的 Dockerfile 应该看起来更像这样:

FROM nimmis/apache-php7


COPY apache_default /etc/apache2/sites-available/000-default.conf

RUN a2enmod rewrite

ENTRYPOINT ["bash", "/path/to/init.sh"]
CMD ["apache2", "-DFOREGROUND", "-k", "start"]

入口点指令将在 CMD 指令之前运行,无论您是否在启动时向容器传递命令。

因此,您需要让 init.sh 执行容器传递给它的命令:

#!/bin/bash
# init.sh

# todo: whatever init.sh does...

# Execute the CMD passed to the container:
exec "$@"

关于php - Docker compose 命令没有这样的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47832676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com