docker 常见遇到的坑

1

运行docker容器时报standard_init_linux.go:195: exec user process caused "no such file or directory"
解决办法
使用以下命令确认是不是这个原因:

cat -v run-lamp.sh 
#!/bin/bash^M
打开脚本发现里面有^M
就是^M这个造成的问题。(原来是dos字符与unix字符的问题 Windows和Linux平台表示回车的方法不一样)
解决方法:
安装dos2unix 
yum install dos2unix
将相关文件转换一下字符即可:
dos2unix Dockerfile
dos2unix run-lamp.sh
重新build可以正常运行了

2docker容器时间和宿主机时间不匹配

/*直接用宿主机器上的时区默认覆盖容器内的时区配置文件即可,也就是跟宿主机器同样的时区配置  */
# docker run -v /etc/localtime:/etc/localtime:ro 镜像id

但是我相信如果写过java的人仍然发现通过java 中new Date()获取到的仍然是容器默认的时区,而是宿主机器上的时区配置,因为java是通过获取timezone来设置时间的。不废话,继续看以下命令:

# docker run -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro  镜像id

3 docker 最大的坑目前不知道原因(docker像容器内传参)

因为部署项目启动容器要动态传参,网上的做法是这样的

FROM java:8
ADD microsoft.jar /root
ENV PARAMS=""
ENTRYPOINT ["sh","-c","java $PARAMS -jar /root/microsoft.jar"]

启动命令为

docker run -d -e PARAMS="-Dserver.port=8080" -p 2000:8080 镜像名称
这样jar包在启动的时候就会去读输入变量

但是死活我的都不成功,大家可以向我这样(实测完美)
1编写启动脚本 (注意不能再windows上编写不然会报上面第一个错)

!#!/bin/bash
java -jar -DeurekaServerUrl=$EUREKAURL -Dhost=$HOST  /app.jar --spring.profiles.active=prod

2修改Dockerfile

FROM java:8
VOLUME /tmp
COPY ./user-model-0.0.1.jar /app.jar
COPY ./start.sh /
RUN chmod +x /start.sh
ENTRYPOINT ["/start.sh"]

3启动

docker run -d -e EUREKAURL=http://172.21.0.16:8761/eureka -e HOST=172.21.0.16  -v /logs:/logs --name redis -p 8665:8080 6a7cc5414a4f

完美!这样urekaServerUrl 和 host 就传进去了;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值