Dockerfile 文件:
FROM bitnami/minideb
WORKDIR /data/gmsvr
ADD libfaketime.so.1 /data/gmsvr/
ADD test /data/gmsvr/
ADD gmsvr /data/gmsvr/
CMD ["/data/gmsvr/gmsvr", "-f", "/data/gmsvr/config/config.ini"]
通过 faketime 把容器内的系统时间修改了,但是容器内通过 CMD 执行的进程打印出来的时候还是和宿主机时间一致,而不是和容器的系统时间一致。
但是执行:docker exec -it gmsvr /bin/bash ,进入容器,执行 test 程序会打印当前系统时间,是和容器系统时间一致的,但是执行 /data/gmsvr/gmsvr 打印的当前时间却和宿主机时间一致。
太懵逼了,请问这是什么原因呢?
1
defunct9 2021-11-25 17:53:44 +08:00
没看懂说的是什么
|
2
yangyaofei 2021-11-25 18:12:47 +08:00
读的东西不一样吧,可能. 我记得原来有可能不同步的时候, 是把 /etc/localtime 做映射, 不知道是不是利用类似的方法就可以了
|
3
anubu 2021-11-25 18:19:19 +08:00
可以看下 faketime 的说明,并不是所有程序都会接收这个 fake ,或者需要附加参数,比如 JVM 就需要。
|
4
Nitroethane 2021-11-25 20:35:46 +08:00 via iPhone
刚看了下 faketime 这个库,修改系统时间的原理是通过首先加载 libfaketime.so 共享库实现对时间相关系统调用的劫持。所以 libfaketime.so 共享库要先于 c 库加载才能实现劫持,也就是 faketime readme 中 usage 部分最开始提到的通过 LD_PRELOAD 实现劫持的方法。
至于为什么两个程序,一个可以一个不可以,你提供的信息太少,没法判断。 另外,docker 目前好像不支持 time namespace |
5
flycloud OP @Nitroethane 感谢,另外一个程序没有用 c 库,😭
|