docker_helpers.bash 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. ## functions to help deal with docker
  2. # Removes container $1
  3. function docker_clean {
  4. docker kill $1 &>/dev/null ||:
  5. sleep .25s
  6. docker rm -vf $1 &>/dev/null ||:
  7. sleep .25s
  8. }
  9. # Removes network $1
  10. function docker_network_clean {
  11. docker network rm $1 &>/dev/null ||:
  12. sleep .25s
  13. }
  14. # get the ip of docker container $1
  15. function docker_ip {
  16. docker inspect --format '{{ .NetworkSettings.IPAddress }}' $1
  17. }
  18. # get the ip of docker container $1
  19. function docker_ips {
  20. docker inspect --format '{{ range .NetworkSettings.Networks }}{{ .IPAddress }}{{ end }}' $1
  21. }
  22. # get the running state of container $1
  23. # → true/false
  24. # fails if the container does not exist
  25. function docker_running_state {
  26. docker inspect -f {{.State.Running}} $1
  27. }
  28. # get the docker container $1 PID
  29. function docker_pid {
  30. docker inspect --format {{.State.Pid}} $1
  31. }
  32. # asserts logs from container $1 contains $2
  33. function docker_assert_log {
  34. local -r container=$1
  35. shift
  36. run docker logs $container
  37. assert_output -p "$*"
  38. }
  39. # wait for a container to produce a given text in its log
  40. # $1 container
  41. # $2 timeout in second
  42. # $* text to wait for
  43. function docker_wait_for_log {
  44. local -r container=$1
  45. local -ir timeout_sec=$2
  46. shift 2
  47. retry $(( $timeout_sec * 2 )) .5s docker_assert_log $container "$*"
  48. }
  49. # Create a docker container named $1 which exposes the docker host unix
  50. # socket over tcp on port 2375.
  51. #
  52. # $1 container name
  53. function docker_tcp {
  54. local container_name="$1"
  55. docker_clean $container_name
  56. docker run -d \
  57. --name $container_name \
  58. --expose 2375 \
  59. -v /var/run/docker.sock:/var/run/docker.sock \
  60. rancher/socat-docker
  61. docker run --link "$container_name:docker" docker:1.9 version
  62. }