我想知道是否可以在不更改主机本身的情况下更改Docker容器中的系统时间.我们正在使用docker容器进行测试,这些容器有时会对时间敏感.我注意到对主机时间所做的任何更改都会立即反映到docker容器中(这是有意义的,因为它们使用相同的内核).我希望Docker提供一种方法让你以某种方式覆盖容器的开始时间并从那里移动.
谢谢
我在容器内动态更改日期时遇到问题。我拥有的:
docker run -it --privileged myDocker
Run Code Online (Sandbox Code Playgroud)
上面的命令运行具有更改日期权限的容器
我可以通过以下方式更改日期:
date --set "12-12-12"
Run Code Online (Sandbox Code Playgroud)
但几秒钟后,日期和时间设置为与主机相同
root@660acd776c6b:/# date --set "12-12-12"
root@660acd776c6b:/# date
Wed Dec 12 00:00:01 UTC 2012
root@660acd776c6b:/# date
Wed Dec 12 00:00:02 UTC 2012
root@660acd776c6b:/# date
Wed Dec 12 00:00:02 UTC 2012
root@660acd776c6b:/# date
Tue Jan 15 10:14:26 UTC 2019
root@660acd776c6b:/# date
Tue Jan 15 10:14:27 UTC 2019
Run Code Online (Sandbox Code Playgroud)
容器未安装 ntp。我无法使用faketime,因为我使用 .net 应用程序中的日期,而该应用程序不使用 .net 中的时间faketime。我无法使用 更改系统时钟faketime。
如何禁用容器和主机之间的同步?
为了尝试了解 Kubernetes 中的安全上下文和功能,我创建了以下 pod 描述:
apiVersion: v1
kind: Pod
metadata:
name: app
spec:
securityContext:
runAsUser: 1000
containers:
- name: busy
image: busybox
command:
- sleep
- "3600"
securityContext:
runAsUser: 2000
capabilities :
add: ["NET_ADMIN", "SYS_TIME"]
Run Code Online (Sandbox Code Playgroud)
我在其中添加 NET_ADMIN 和 SYS_TIME 功能。
给定 Linux 功能手册页: http://man7.org/linux/man-pages/man7/capability.7.html
我希望能够执行跟踪路由或设置日期:
$ kubectl exec -it app -- traceroute google.fr
traceroute: socket: Operation not permitted
command terminated with exit code 1
$ kubectl exec -it app -- /bin/sh date --set="10:00:00"
date: can't set date: Operation not permitted …Run Code Online (Sandbox Code Playgroud)