核心代码
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
很明显问题在于用户没有文件的执行权限。
解决方法有两种:
- 赋予shell文件可执行权限
RUN chmod +x entrypoint.sh
- 将sh作为ENTRYPOINT数组的第一个参数(推荐)
ENTRYPOINT ["sh", "./entrypoint.sh"]
推荐使用第二种方式,因为不需要再额外去执行chmod