【发布时间】:2022-01-04 09:45:55
【问题描述】:
美好的一天!
我有一个在窗口中运行的微服务和一个存储微服务地址的注册表。
我还有一个在容器打开时运行的脚本。 脚本获取本地ip并使用curl将其发送到另一台服务器。 脚本执行后返回code 0,容器退出。你如何解决这个问题?
#docker-compose realtime logs
nginx_1 | "code":"SUCCESSFUL_REQUEST" nginx_1 exited with code 0
我的 bash 脚本
#!/bin/bash
address=$(hostname -i)
curl -X POST http://registry/service/register -H 'Content-Type: application/json' -d '{"name":"'"$MICROSERVICE_NAME"'","address":"'"$address"'"}'
脚本运行良好,没有问题,但不幸的是它破坏了容器进程。是否有可能以某种方式拦截此代码,使其不会关闭容器?
如果有任何帮助或评论,我将不胜感激!????
编辑:
这里的Dockerfile是启动容器后调用的脚本
FROM nginx:1.21.1-alpine
WORKDIR /var/www/
COPY ./script.sh /var/www/script.sh
RUN apk add --no-cache --upgrade bash && \
apk add nano
#launch script
CMD /var/www/script.sh
编辑 2:
我的 docker-compose.yml
version: "3.9"
services:
#database
pgsql:
hostname: pgsql
build: ./pgsql
ports:
- 5432:5432/tcp
volumes:
- ./pgsql/data:/var/lib/postgresql/data
#registry
registry_fpm:
build: ./fpm/registry
depends_on:
- pgsql
volumes:
- ./microservices/registry:/var/www/registry
registry_nginx:
hostname: registry
build: ./nginx/registry
depends_on:
- registry_fpm
volumes:
- ./microservices/registry:/var/www/registry
- ./nginx/registry/nginx.conf:/etc/nginx/nginx.conf
#server
nginx:
build: ./nginx
environment:
MICROSERVICE_NAME: Microservice_1
depends_on:
- registry_nginx
ports:
- 80:80/tcp
【问题讨论】:
-
您如何准确运行该脚本?
-
@NicoHaase 我编辑了帖子,请看一下
-
这是预期的行为。 docker 容器只运行一个命令并在命令退出时退出。参考this SO thread。如果我没记错的话,您正在寻找一个单独的容器来监控docker socket 并注册容器的启动/停止/状态。请分享您的撰写文件(已编辑),我们可以提出一些建议
-
@kevinnls 我编辑了这篇文章。感谢您的链接!
-
我对你期望 Docker 容器在 curl 之后继续做什么感到困惑。
标签: bash docker nginx curl docker-compose