我正在尝试使用[laradock] [1]创建一个nginx-laravel-mysql堆栈的docker容器,这是一个用于laravel的免费docker-compose插件。
要使其正常工作,我必须从我的本地环境或正在运行的容器中运行php artisan key:generate
(两种不良做法)。
我尝试将command: /bin/bash -c "php artisan key:generate"
添加到我的docker-compose.yml文件中。这导致退出;当我运行docker-compose ps
时,我会看到laradock_workspace_1 /bin/bash -c nohup php art ... Exit 1
。添加nohup
会导致相同的结果。 实际上,我在这里运行的任何命令都会导致退出
转到Dockerfile。如果我添加RUN php artisan key:generate
(或其任何变体),我会得到:
ERROR: Service 'workspace' failed to build: The command '/bin/sh -c php artisan key:generate' returned a non-zero code: 1
如果我运行与CMD
或ENTRYPOINT
相同的命令,即使使用nohup
,它也会运行并生成密钥,但会退出:
docker-compose ps
说:laradock_workspace_1 /bin/sh -c nohup php artis... Exit 0
我可以将restart: always
添加到docker-compose.yml,但这会导致密钥生成,退出,重启的恶性循环。
如何在不退出的情况下从Dockerfile或docker-compose.yml执行此命令(或任何命令)的任何想法?
编辑:回答@dnephin的问题:php artisan key:generate
向/.env文件添加一个哈希值,并为php数组添加一个值。它只需要该命令,无需输入。当我运行docker-compose run workspace php artisan key:generate
时,我得到Could not open input file: artisan
。
奇怪的是,当我运行docker-compose run workspace pwd
时,我看到了我的laravel文件的正确路径(如果我运行docker-compose exec workspace bash
,我可以看到所有这些文件,但是当我尝试运行docker-compose run workspace ls
时我没有看到任何东西。就像文件不存在一样。