项目场景:

使用docker-compose部署项目时,多项目之间存在依赖管理,顺序启动使用wait-for-it.sh
下载地址


问题描述

各种问题,查了半天,记录之
把下载下来的wait-for-it.sh拖进Linux,兴高采烈的去执行./wait-for-it.sh,啪,第一个问题他来了


1、-bash: ./wait-for-it.sh: Permission denied


[root@localhost docker-compose]# ./wait-for-it.sh
-bash: ./wait-for-it.sh: Permission denied

很明显这是没有权限,简单,只需执行一下赋予权限语句

 chmod +x ./wait-for-it.sh

满心欢喜,在执行./wait-for-it.sh,啪,第二个问题出现了


2、: No such file or directory

[root@localhost docker-compose]# ./wait-for-it.sh         
: No such file or directory

没有这样的文件或目录?????
各种查,没有解决问题,最后发现了这位哥哥的帖子
大致意思就是说,wait-for-it.sh文件的格式有问题,需要在Linux里面重新设置一下

1、输入 vim wait-for-it.sh 打开wait-for-it.sh文件

2、输入 :set ff 回车 显示 fileformat=dos

3、输入 :set ff=unix 回车 就是告诉 vi 编辑器,使用unix换行符
4、输入 :wq 回车 退出保存


至此,问题基本解决,输入./wait-for-it.sh www.baidu.com:80 -- echo "baidu is up" 测试

[root@localhost docker-compose]# ./wait-for-it.sh www.baidu.com:80 -- echo "baidu is up" 
wait-for-it.sh: waiting 15 seconds for www.baidu.com:80
wait-for-it.sh: www.baidu.com:80 is available after 0 seconds
baidu is up

成功!!!

附件

和wait-for-it.sh同级目录下docker-compose文件

version: '3'

services:
# mysql
  my_mysql:
    container_name: my_mysql
    image: mysql:5.7.34
    restart: always
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf/my.cnf:/etc/my.cnf
    environment:
      - "MYSQL_DATABASE=root"
      - "MYSQL_ROOT_PASSWORD=root"
      - "TZ=Asia/Shanghai"

# nacos
  my_nacos:
    container_name: my_nacos
    hostname: my_nacos
    image: nacos/nacos-server:latest
    restart: always
    ports:
      - "8848:8848"
    environment:
      - "MODE=standalone"
      - "SPRING_DATASOURCE_PLATFORM=mysql"
      - "MYSQL_SERVICE_HOST=my_mysql"
      - "MYSQL_SERVICE_PORT=3306"
      - "MYSQL_SERVICE_USER=root"
      - "MYSQL_SERVICE_PASSWORD=root123"
      - "MYSQL_SERVICE_DB_NAME=snowy-cloud-nacos"
    depends_on:
      - my_mysql

#后台
  test-app: #spring boot的服务名,服务名自定义
    #容器名称
    container_name: test-app
    #image是指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
    image: java:8
    restart: always
    environment:
      TZ: Asia/Shanghai
   #ports用于映射端口的标签。使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。
    ports:
      - "9001:9001"
    #挂载文件夹
    volumes:
      - ./backend/test-app.jar:/data/test-app.jar
      - ./wait-for-it.sh:/wait-for-it.sh
    #启动容器后执行的命令
    command: ["/wait-for-it.sh", "my_nacos:8848", "--", "java", "-jar", "/data/test-app.jar"]
    depends_on:
      - my_nacos

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐