docker 常见遇到的坑
程序员文章站
2022-05-14 20:41:52
...
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 就传进去了;
上一篇: 初试docker遇到的坑
推荐阅读
-
Android Studio升级到3.0后遇到的坑
-
工作中可能遇到的难以发现的坑——相似字符问题
-
SpringBoot项目使用RedisTemplate遇到key值\xac\xed\x00\x05t\x00的坑
-
QT攻略——我在QT中遇到的那些坑
-
NET Framework项目移植到NET Core上遇到的一系列坑(2)
-
AntD框架的upload组件上传图片时遇到的一些坑
-
Android Studio 3.x版本 的输入法遇到的坑及解决方案
-
html标签从.net framework转移到.net standard(.net core 2.2)时遇到的坑及填坑
-
详解安装mitmproxy以及遇到的坑和简单用法
-
Python中使用遍历在列表中添加字典遇到的坑