首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >容器在分离模式下运行时未执行初始化脚本

容器在分离模式下运行时未执行初始化脚本
EN

Stack Overflow用户
提问于 2019-12-22 17:41:56
回答 1查看 113关注 0票数 0

我有一个构建Django环境的Dockerfile,它基于Ubuntu镜像并运行Apache HTTP Server。(httpd)让我们称这个图像为backend_image。连同PostgreSQL数据库的另一个容器一起,我计划使用这个镜像作为开发环境,启动这两个容器并使用--network标志将它们连接起来。

我计划在backend_image中有一个初始化脚本,每当后端容器运行时,它都会创建相关的表。脚本的内容对于Django应用程序来说是相当标准的,如下所示。

代码语言:javascript
复制
#!/bin/bash
source ${VIRTUAL_ENV_DIR}/bin/activate
python ${SCRIPT_LOCATION} makemigrations library
python ${SCRIPT_LOCATION} migrate
deactivate

当我在前台运行backend_image时,这个脚本可以正确运行。(例如,在docker run命令中没有-d标志)我通过使用psql连接到数据库容器来检查它,\dt命令打印相关的数据库。但是,为了编排项目所需的多个容器的运行,我需要在分离模式下运行它们。(我有一个运行容器并连接它们的shell脚本)问题是,当我在分离模式下运行后端容器时,不会在数据库容器中创建表。

下面是backend_image的Dockerfile文件的CMD

代码语言:javascript
复制
CMD ["/bin/bash", "-c", "/tmp/initialization/initialize-db.sh && apachectl -D FOREGROUND"]

正如我所说的,如果容器在前台运行,脚本就会工作,相关的表就会在数据库容器中创建。类似地,如果我通过覆盖CMD (即在命令行上指定/bin/bash )在backend_image上使用CMD命令,并从容器中手动运行脚本,它将成功执行。但不知何故,当在带有-d标志的分离模式下运行时,脚本似乎不会在PostgreSQL数据库中创建表。(据我观察,通过psql连接到数据库容器,并通过\dt命令打印关系)

请注意,apachectl命令似乎正在运行,服务器(以及Django应用程序)似乎可以访问,即使后端容器在分离模式下运行。唯一的问题似乎是相关的表不是在数据库容器中创建的。初始化脚本似乎永远不会在分离模式下运行,就好像当容器在分离模式下运行时,CMD命令中&&之前的部分被忽略了。

是初始化脚本有问题吗?(或者我通过backend_image的Dockerfile文件的CMD执行它的方式),或者是我在分离模式中遗漏了什么,它阻止了脚本的执行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-22 19:34:25

大多数时候我会遇到这样的错误,那是因为我的数据库还没有准备好。要了解发生了什么,您可以在shell中登录您的web服务:

代码语言:javascript
复制
docker-compose logs your-web-service -f # if you use docker-compose

下面是我在所有entrypoint.sh脚本中提供的一个解决方案,用于在使用数据库之前等待数据库初始化:

代码语言:javascript
复制
while ! nc -vz my_db 5432;
    do
        if [ "$MY_DB_NOT_READY_DISPLAYED" != "yes" ]
        then
            echo "my_db not ready (wait for it...)";
            MY_DB_NOT_READY_DISPLAYED="yes"
        fi
        sleep 2;
    done;
echo my_db ready;

我们尝试连接到数据库。如果它能工作,那就好!如果没有,我们将在数据库未准备就绪时显示,然后每2秒重试一次。

也许可以试着看看等待你的数据库是否能解决它?我在前台或后台启动的容器之间也有这种行为变化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59443115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档