Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Bash脚本构建/部署Docker_Bash_Docker_Docker Compose - Fatal编程技术网

使用Bash脚本构建/部署Docker

使用Bash脚本构建/部署Docker,bash,docker,docker-compose,Bash,Docker,Docker Compose,我有一个deploy脚本,我正试图将它用于我的serverforcd,但在编写bash脚本以完成一些必需的步骤(如运行npm和迁移命令)时遇到了问题 如何从这个脚本进入容器bash,运行下面的命令,然后退出以完成更改 以下是我尝试自动化的脚本: cd /Project docker-compose -f docker-compose.prod.yml down git pull docker-compose -f docker-compose.prod.yml build # all good

我有一个deploy脚本,我正试图将它用于我的serverforcd,但在编写bash脚本以完成一些必需的步骤(如运行npm和迁移命令)时遇到了问题

如何从这个脚本进入容器bash,运行下面的命令,然后退出以完成更改

以下是我尝试自动化的脚本:

cd /Project
docker-compose -f docker-compose.prod.yml down
git pull
docker-compose -f docker-compose.prod.yml build

# all good until here because it opens bash and does not allow more commands to run
docker-compose -f docker-compose.prod.yml run --rm web bash

     npm install  # should be run inside of web bash
     python manage.py migrate_all # should be run inside of web bash
     exit # should be run inside of web bash

# back out of web bash
docker-compose -f docker-compose.prod.yml up -d

通常,Docker映像是自包含的,并且知道如何在没有任何用户干预的情况下启动自己。除了一些有限的例外情况,您不需要
docker compose run
interactive shell来进行部署后设置,并且
docker exec
应该保留用于紧急调试

在这个脚本中你做了两件事

首先是安装节点包。这些应该被封装在你的图像中;您的Dockerfile几乎总是看起来像

来自节点
WORKDIR/app
复制包*.json。

运行npm ci#您可以很容易地将bash放入容器(
exec-it
),但是您必须在容器中有一个bash shell,以便继续从中运行脚本。为什么不直接从Dockerfile执行安装?根本不这样做。在Dockerfile中运行
npm install
,使映像包含正确的库树。(如果您的
docker compose.yml
在映像的源代码树上装载卷,请将其删除。)您可以
docker compose运行一个单独的容器来执行迁移。您可以推迟运行
docker compose down
直到
docker compose build
完成。有趣的是,因为我使用了webpack,运行
npm run build
更改了我的webpack-stats.json文件,所以即使容器已生成并交换,在生成之前仍有500个错误。。。自然地,您的解决方案是强制的,因此我可以正确地自动化构建。现在看,这是我应该一直做的,谢谢!
docker-compose run web \
  python manage.py migrate_all