Dockerfile启动多个服务

核心代码
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY ./entrypoint.sh .
COPY ./WebApplication8 ./WebApplication8
COPY ./WebApplication9 ./WebApplication9
EXPOSE 80
EXPOSE 50001

#RUN chmod +x ./entrypoint.sh

# 用nohup框起来,不然npm start执行了之后不会执行后面的
#CMD nohup sh -c 'dotnet WebApplication8/WebApplication8.dll & dotnet WebApplication9/WebApplication8.dll'
ENTRYPOINT ["sh","./entrypoint.sh"]

 

WORKDIR 命令为后续的 RUN、CMD、COPY、ADD 等命令配置工作目录。在设置了 WORKDIR 命令后,接下来的 COPY 和 ADD 命令中的相对路径就是相对于 WORKDIR 指定的路径
 
 
entrypoint.sh
dotnet WebApplication8/WebApplication8.dll &
dotnet WebApplication9/WebApplication8.dll

 

 
注:entrypoint.sh里面前面的命令以&结尾,表示后台服务,最后一个命令不以&结尾,表示前台服务,必须要这样,如果都是后台服务,则执行完会直接退出,如果都是前台服务,则只会执行第一条命令; CMD nohup sh -c '1.dll & 2.dll',这里,同理,&连接表示后台服务,&&连接表示前台服务
 
docker build -t mycore .

docker run --name mycore -p 50001:50001 -p 50002:80 -d mycore

 

 
docker使用entrypoint执行时报permission denied错误
 
在Dockerfile中使用指令ENTRYPOINT来执行项目下entrypoint.shshell文件,如下:
ENTRYPOINT ["./entrypoint.sh"]
时报错提示:
Exec: "./entrypoint.sh": permission denied
很明显问题在于用户没有文件的执行权限。
 
解决方法有两种:
  1. 赋予shell文件可执行权限
RUN chmod +x entrypoint.sh
 
  1. 将sh作为ENTRYPOINT数组的第一个参数(推荐)
ENTRYPOINT ["sh", "./entrypoint.sh"]
 
推荐使用第二种方式,因为不需要再额外去执行chmod

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值