|
57 | 57 | ref 'http://wiki.apparmor.net/index.php/Main_Page' |
58 | 58 |
|
59 | 59 | only_if { %w(ubuntu debian).include? os[:name] } |
60 | | - docker.ps.each do |id| |
61 | | - describe docker.inspect(id) do |
| 60 | + docker.containers.running?.ids.each do |id| |
| 61 | + describe docker.object(id) do |
62 | 62 | its(['AppArmorProfile']) { should include(APP_ARMOR_PROFILE) } |
63 | 63 | its(['AppArmorProfile']) { should_not eq nil } |
64 | 64 | end |
|
84 | 84 | its(['selinux-enabled']) { should eq(true) } |
85 | 85 | end |
86 | 86 |
|
87 | | - docker.ps.each do |id| |
88 | | - describe docker.inspect(id) do |
| 87 | + docker.containers.running?.ids.each do |id| |
| 88 | + describe docker.object(id) do |
89 | 89 | its(%w(HostConfig SecurityOpt)) { should_not eq nil } |
90 | 90 | its(%w(HostConfig SecurityOpt)) { should include(SELINUX_PROFILE) } |
91 | 91 | end |
|
104 | 104 | ref url: 'http://man7.org/linux/man-pages/man7/capabilities.7.html' |
105 | 105 | ref url: 'https://github.com/docker/docker/blob/master/oci/defaults_linux.go#L64-L79' |
106 | 106 |
|
107 | | - docker.ps.each do |id| |
108 | | - describe docker.inspect(id) do |
| 107 | + docker.containers.running?.ids.each do |id| |
| 108 | + describe docker.object(id) do |
109 | 109 | its(%w(HostConfig CapDrop)) { should include(/all/) } |
110 | 110 | its(%w(HostConfig CapDrop)) { should_not eq nil } |
111 | 111 | its(%w(HostConfig CapAdd)) { should eq CONTAINER_CAPADD } |
|
123 | 123 | tag level: 1 |
124 | 124 | ref url: 'https://docs.docker.com/engine/reference/commandline/cli/' |
125 | 125 |
|
126 | | - docker.ps.each do |id| |
127 | | - describe docker.inspect(id) do |
| 126 | + docker.containers.running?.ids.each do |id| |
| 127 | + describe docker.object(id) do |
128 | 128 | its(%w(HostConfig Privileged)) { should eq false } |
129 | 129 | its(%w(HostConfig Privileged)) { should_not eq true } |
130 | 130 | end |
|
141 | 141 | tag level: 1 |
142 | 142 | ref url: 'https://docs.docker.com/engine/userguide/containers/dockervolumes/' |
143 | 143 |
|
144 | | - docker.ps.each do |id| |
145 | | - info = docker.inspect(id) |
| 144 | + docker.containers.running?.ids.each do |id| |
| 145 | + info = docker.object(id) |
146 | 146 | info['Mounts'].each do |mounts| |
147 | 147 | describe mounts['Source'] do |
148 | 148 | it { should_not eq '/' } |
|
168 | 168 | tag level: 1 |
169 | 169 | ref url: 'https://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/' |
170 | 170 |
|
171 | | - docker.ps.each do |id| |
| 171 | + docker.containers.running?.ids.each do |id| |
172 | 172 | execute_command = 'docker exec ' + id + ' ps -e' |
173 | 173 | describe command(execute_command) do |
174 | 174 | its('stdout') { should_not match(/ssh/) } |
|
187 | 187 | ref url: 'https://docs.docker.com/engine/userguide/networking/default_network/binding/' |
188 | 188 | ref url: 'https://www.adayinthelifeof.nl/2012/03/12/why-putting-ssh-on-another-port-than-22-is-bad-idea/' |
189 | 189 |
|
190 | | - docker.ps.each do |id| |
191 | | - info = docker.inspect(id) |
192 | | - ports = info['NetworkSettings']['Ports'].keys |
193 | | - ports.each do |item| |
194 | | - info['NetworkSettings']['Ports'][item].each do |hostport| |
195 | | - describe hostport['HostPort'].to_i.between?(1, 1024) do |
| 190 | + docker.containers.running?.ids.each do |id| |
| 191 | + container_info = docker.object(id) |
| 192 | + next unless container_info['NetworkSettings']['Ports'].nil? |
| 193 | + container_info['NetworkSettings']['Ports'].each do |_, hosts| |
| 194 | + hosts.each do |host| |
| 195 | + describe host['HostPort'].to_i.between?(1, 1024) do |
196 | 196 | it { should eq false } |
197 | 197 | end |
198 | 198 | end |
|
222 | 222 | ref url: 'https://docs.docker.com/engine/userguide/networking/dockernetworks/' |
223 | 223 | ref url: 'https://github.com/docker/docker/issues/6401' |
224 | 224 |
|
225 | | - docker.ps.each do |id| |
226 | | - describe docker.inspect(id) do |
| 225 | + docker.containers.running?.ids.each do |id| |
| 226 | + describe docker.object(id) do |
227 | 227 | its(%w(HostConfig NetworkMode)) { should_not eq 'host' } |
228 | 228 | end |
229 | 229 | end |
|
241 | 241 | ref url: 'https://docs.docker.com/engine/reference/commandline/cli/#run' |
242 | 242 | ref url: 'https://docs.docker.com/v1.8/articles/runmetrics/' |
243 | 243 |
|
244 | | - docker.ps.each do |id| |
245 | | - describe docker.inspect(id) do |
| 244 | + docker.containers.running?.ids.each do |id| |
| 245 | + describe docker.object(id) do |
246 | 246 | its(%w(HostConfig Memory)) { should_not eq 0 } |
247 | 247 | end |
248 | 248 | end |
|
260 | 260 | ref url: 'https://docs.docker.com/engine/reference/commandline/cli/#run' |
261 | 261 | ref url: 'https://docs.docker.com/v1.8/articles/runmetrics/' |
262 | 262 |
|
263 | | - docker.ps.each do |id| |
264 | | - describe docker.inspect(id) do |
| 263 | + docker.containers.running?.ids.each do |id| |
| 264 | + describe docker.object(id) do |
265 | 265 | its(%w(HostConfig CpuShares)) { should_not eq 0 } |
266 | 266 | its(%w(HostConfig CpuShares)) { should_not eq 1024 } |
267 | 267 | end |
|
278 | 278 | tag level: 1 |
279 | 279 | ref url: 'https://docs.docker.com/engine/reference/commandline/cli/#run' |
280 | 280 |
|
281 | | - docker.ps.each do |id| |
282 | | - describe docker.inspect(id) do |
| 281 | + docker.containers.running?.ids.each do |id| |
| 282 | + describe docker.object(id) do |
283 | 283 | its(%w(HostConfig ReadonlyRootfs)) { should eq true } |
284 | 284 | end |
285 | 285 | end |
|
295 | 295 | tag level: 1 |
296 | 296 | ref url: 'https://docs.docker.com/engine/userguide/networking/default_network/binding/' |
297 | 297 |
|
298 | | - docker.ps.each do |id| |
299 | | - info = docker.inspect(id) |
300 | | - ports = info['NetworkSettings']['Ports'].keys |
301 | | - ports.each do |item| |
302 | | - info['NetworkSettings']['Ports'][item].each do |hostip| |
303 | | - describe hostip['HostIp'] do |
| 298 | + docker.containers.running?.ids.each do |id| |
| 299 | + container_info = docker.object(id) |
| 300 | + next unless container_info['NetworkSettings']['Ports'].nil? |
| 301 | + container_info['NetworkSettings']['Ports'].each do |_, hosts| |
| 302 | + hosts.each do |host| |
| 303 | + describe host['HostIp'].to_i.between?(1, 1024) do |
304 | 304 | it { should_not eq '0.0.0.0' } |
305 | 305 | end |
306 | 306 | end |
|
318 | 318 | tag level: 1 |
319 | 319 | ref url: 'https://docs.docker.com/engine/reference/commandline/cli/#restart-policies' |
320 | 320 |
|
321 | | - docker.ps.each do |id| |
322 | | - info = docker.inspect(id) |
323 | | - only_if { info['HostConfig']['RestartPolicy']['Name'] != 'no' } |
324 | | - describe info do |
325 | | - its(%w(HostConfig RestartPolicy Name)) { should eq 'on-failure' } |
326 | | - end |
327 | | - describe info do |
328 | | - its(%w(HostConfig RestartPolicy MaximumRetryCount)) { should eq 5 } |
| 321 | + docker.containers.running?.ids.each do |id| |
| 322 | + describe.one do |
| 323 | + describe docker.object(id) do |
| 324 | + its(%w(HostConfig RestartPolicy Name)) { should eq 'no' } |
| 325 | + end |
| 326 | + describe docker.object(id) do |
| 327 | + its(%w(HostConfig RestartPolicy Name)) { should eq 'on-failure' } |
| 328 | + its(%w(HostConfig RestartPolicy MaximumRetryCount)) { should eq 5 } |
| 329 | + end |
329 | 330 | end |
330 | 331 | end |
331 | 332 | end |
|
341 | 342 | ref url: 'https://docs.docker.com/engine/reference/run/#pid-settings' |
342 | 343 | ref url: 'http://man7.org/linux/man-pages/man7/pid_namespaces.7.html' |
343 | 344 |
|
344 | | - docker.ps.each do |id| |
345 | | - describe docker.inspect(id) do |
| 345 | + docker.containers.running?.ids.each do |id| |
| 346 | + describe docker.object(id) do |
346 | 347 | its(%w(HostConfig PidMode)) { should_not eq 'host' } |
347 | 348 | end |
348 | 349 | end |
|
359 | 360 | ref url: 'https://docs.docker.com/engine/reference/run/#ipc-settings' |
360 | 361 | ref url: 'http://man7.org/linux/man-pages/man7/pid_namespaces.7.html' |
361 | 362 |
|
362 | | - docker.ps.each do |id| |
363 | | - describe docker.inspect(id) do |
| 363 | + docker.containers.running?.ids.each do |id| |
| 364 | + describe docker.object(id) do |
364 | 365 | its(%w(HostConfig IpcMode)) { should_not eq 'host' } |
365 | 366 | end |
366 | 367 | end |
|
376 | 377 | tag level: 1 |
377 | 378 | ref url: 'https://docs.docker.com/engine/reference/commandline/cli/#run' |
378 | 379 |
|
379 | | - docker.ps.each do |id| |
380 | | - describe docker.inspect(id) do |
| 380 | + docker.containers.running?.ids.each do |id| |
| 381 | + describe docker.object(id) do |
381 | 382 | its(%w(HostConfig Devices)) { should be_empty } |
382 | 383 | end |
383 | 384 | end |
|
393 | 394 | tag level: 1 |
394 | 395 | ref url: 'https://docs.docker.com/engine/reference/commandline/cli/#setting-ulimits-in-a-container' |
395 | 396 |
|
396 | | - docker.ps.each do |id| |
397 | | - describe docker.inspect(id) do |
| 397 | + docker.containers.running?.ids.each do |id| |
| 398 | + describe docker.object(id) do |
398 | 399 | its(%w(HostConfig Ulimits)) { should eq nil } |
399 | 400 | end |
400 | 401 | end |
|
412 | 413 | ref url: 'https://docs.docker.com/engine/reference/run/' |
413 | 414 | ref url: 'https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt' |
414 | 415 |
|
415 | | - docker.ps.each do |id| |
| 416 | + docker.containers.running?.ids.each do |id| |
416 | 417 | raw = command("docker inspect --format '{{range $mnt := .Mounts}} {{json $mnt.Propagation}} {{end}}' #{id}").stdout |
417 | 418 | describe raw.delete("\n").delete('\"').delete(' ') do |
418 | 419 | it { should_not eq 'shared' } |
|
431 | 432 | ref url: 'https://docs.docker.com/engine/reference/run/' |
432 | 433 | ref url: 'http://man7.org/linux/man-pages/man7/pid_namespaces.7.html' |
433 | 434 |
|
434 | | - docker.ps.each do |id| |
435 | | - describe docker.inspect(id) do |
| 435 | + docker.containers.running?.ids.each do |id| |
| 436 | + describe docker.object(id) do |
436 | 437 | its(%w(HostConfig UTSMode)) { should_not eq 'host' } |
437 | 438 | end |
438 | 439 | end |
|
453 | 454 | ref url: 'https://www.kernel.org/doc/Documentation/prctl/seccomp_filter.txt' |
454 | 455 | ref url: 'https://github.com/docker/docker/pull/17034' |
455 | 456 |
|
456 | | - docker.ps.each do |id| |
457 | | - describe docker.inspect(id) do |
| 457 | + docker.containers.running?.ids.each do |id| |
| 458 | + describe docker.object(id) do |
458 | 459 | its(%w(HostConfig SecurityOpt)) { should include(/seccomp/) } |
459 | 460 | its(%w(HostConfig SecurityOpt)) { should_not include(/seccomp[=|:]unconfined/) } |
460 | 461 | end |
|
502 | 503 | ref url: 'https://docs.docker.com/engine/reference/run/#specifying-custom-cgroups' |
503 | 504 | ref url: 'https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html' |
504 | 505 |
|
505 | | - docker.ps.each do |id| |
506 | | - describe docker.inspect(id) do |
| 506 | + docker.containers.running?.ids.each do |id| |
| 507 | + describe docker.object(id) do |
507 | 508 | its(%w(HostConfig CgroupParent)) { should be_empty } |
508 | 509 | end |
509 | 510 | end |
|
523 | 524 | ref url: 'https://lwn.net/Articles/475678/' |
524 | 525 | ref url: 'https://lwn.net/Articles/475362/' |
525 | 526 |
|
526 | | - docker.ps.each do |id| |
527 | | - describe docker.inspect(id) do |
| 527 | + docker.containers.running?.ids.each do |id| |
| 528 | + describe docker.object(id) do |
528 | 529 | its(%w(HostConfig SecurityOpt)) { should include(/no-new-privileges/) } |
529 | 530 | end |
530 | 531 | end |
|
0 commit comments