This is an automated email from the ASF dual-hosted git repository. dragos pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-devtools.git
The following commit(s) were added to refs/heads/master by this push: new 5c3ab90 fixing the issue with container reuse for consecutive invocations (#56) 5c3ab90 is described below commit 5c3ab903759aae23e1f0925c9fe864136049db27 Author: ddragosd <ddrag...@gmail.com> AuthorDate: Tue Oct 3 16:32:18 2017 -0700 fixing the issue with container reuse for consecutive invocations (#56) * auto-discover runc binaries * only mount runc binary --- docker-compose/.travis/build.sh | 2 +- docker-compose/Makefile | 32 +++++++++++++++++++++++++++----- docker-compose/README.md | 20 ++++++++++++++++++-- docker-compose/docker-compose.yml | 17 +++++++++++------ 4 files changed, 57 insertions(+), 14 deletions(-) diff --git a/docker-compose/.travis/build.sh b/docker-compose/.travis/build.sh index 6a61d15..8dc41f2 100755 --- a/docker-compose/.travis/build.sh +++ b/docker-compose/.travis/build.sh @@ -4,4 +4,4 @@ SCRIPTDIR=$(cd $(dirname "$0") && pwd) ROOTDIR="$SCRIPTDIR/../" cd $ROOTDIR -PATH=$PATH:/usr/local/bin/ make quick-start stop +PATH=$PATH:/usr/local/bin/ VERBOSE=true make quick-start stop diff --git a/docker-compose/Makefile b/docker-compose/Makefile index 16a1aec..1f9ca78 100644 --- a/docker-compose/Makefile +++ b/docker-compose/Makefile @@ -6,6 +6,10 @@ WSK_CLI ?= $(PROJECT_HOME)/bin/wsk OPEN_WHISK_DB_PREFIX ?= local_ +DOCKER_KERNEL ?= $(shell docker version --format "{{.Server.KernelVersion}}") +RUNC_BINARY ?= $(shell if [[ $(DOCKER_KERNEL) == *-moby || $(DOCKER_KERNEL) == *-boot2docker ]]; then (docker run --rm --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh -c "which runc || which docker-runc"); else (which runc || which docker-runc); fi) +DOCKER_BINARY ?= $(shell if [[ $(DOCKER_KERNEL) == *-moby || $(DOCKER_KERNEL) == *-boot2docker ]]; then (docker run --rm --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh -c "which docker"); else (which docker); fi) + ifndef VERBOSE .SILENT: endif @@ -67,27 +71,45 @@ setup: cd $(PROJECT_HOME)/ansible/roles/nginx/files/ && ./genssl.sh $(DOCKER_HOST_IP) server cp $(PROJECT_HOME)/ansible/roles/nginx/files/*.pem ~/tmp/openwhisk/apigateway/ssl cp -r ./apigateway/* ~/tmp/openwhisk/apigateway/ + > ~/tmp/openwhisk/local.env + printf "DOCKER_BINARY=$(DOCKER_BINARY)\n" >> ~/tmp/openwhisk/local.env + printf "RUNC_BINARY=$(RUNC_BINARY)\n" >> ~/tmp/openwhisk/local.env + printf "DOCKER_COMPOSE_HOST=$(DOCKER_HOST_IP)\n" >> ~/tmp/openwhisk/local.env + printf "DOCKER_REGISTRY=$(DOCKER_REGISTRY)\n" >> ~/tmp/openwhisk/local.env + printf "DOCKER_IMAGE_PREFIX=$(DOCKER_IMAGE_PREFIX)\n" >> ~/tmp/openwhisk/local.env .PHONY: restart restart: stop rm start-docker-compose .PHONY: restart-controller restart-controller: - DOCKER_COMPOSE_HOST=$(DOCKER_HOST_IP) DOCKER_REGISTRY=$(DOCKER_REGISTRY) DOCKER_IMAGE_PREFIX=$(DOCKER_IMAGE_PREFIX) docker-compose --project-name openwhisk restart controller 2>&1 > ~/tmp/openwhisk/docker-compose.log & + $(shell cat ~/tmp/openwhisk/local.env) docker-compose --project-name openwhisk stop controller + $(shell cat ~/tmp/openwhisk/local.env) docker-compose --project-name openwhisk rm controller + $(shell cat ~/tmp/openwhisk/local.env) docker-compose --project-name openwhisk up controller 2>&1 >> ~/tmp/openwhisk/docker-compose.log & + echo "waiting for the controller to see the invoker is 'up' ... " + until (curl --silent http://$(DOCKER_HOST_IP):8888/invokers | grep "up"); do printf '.'; sleep 5; done + +.PHONY: restart-invoker +restart-invoker: + $(shell cat ~/tmp/openwhisk/local.env) docker-compose --project-name openwhisk stop invoker + $(shell cat ~/tmp/openwhisk/local.env) docker-compose --project-name openwhisk rm invoker + echo "waiting for the invoker to be marked 'down' ... " + until (curl --silent http://$(DOCKER_HOST_IP):8888/invokers | grep "down"); do printf '.'; sleep 5; done + $(shell cat ~/tmp/openwhisk/local.env) docker-compose --project-name openwhisk up invoker 2>&1 >> ~/tmp/openwhisk/docker-compose.log & echo "waiting for the invoker to be marked Healthy ... " until (curl --silent http://$(DOCKER_HOST_IP):8888/invokers | grep "up"); do printf '.'; sleep 5; done .PHONY: start-docker-compose start-docker-compose: - DOCKER_COMPOSE_HOST=$(DOCKER_HOST_IP) DOCKER_REGISTRY=$(DOCKER_REGISTRY) DOCKER_IMAGE_PREFIX=$(DOCKER_IMAGE_PREFIX) docker-compose --project-name openwhisk up 2>&1 > ~/tmp/openwhisk/docker-compose.log & + $(shell cat ~/tmp/openwhisk/local.env) docker-compose --project-name openwhisk up 2>&1 > ~/tmp/openwhisk/docker-compose.log & .PHONY: stop stop: - DOCKER_COMPOSE_HOST=$(DOCKER_HOST_IP) DOCKER_REGISTRY=$(DOCKER_REGISTRY) DOCKER_IMAGE_PREFIX=$(DOCKER_IMAGE_PREFIX) docker-compose --project-name openwhisk stop + $(shell cat ~/tmp/openwhisk/local.env) docker-compose --project-name openwhisk stop .PHONY: rm rm: - DOCKER_COMPOSE_HOST=$(DOCKER_HOST_IP) DOCKER_REGISTRY=$(DOCKER_REGISTRY) DOCKER_IMAGE_PREFIX=$(DOCKER_IMAGE_PREFIX) docker-compose --project-name openwhisk rm + $(shell cat ~/tmp/openwhisk/local.env) docker-compose --project-name openwhisk rm .PHONY: init-couchdb init-couchdb: @@ -135,7 +157,7 @@ hello-world: create-hello-world-function echo "$$(tput setaf 4)invoking the function ...$$(tput sgr0)" res=`$(WSK_CLI) -i action invoke hello --blocking --result` \ && echo "invokation result:" $$res \ - && (echo $$res | grep "Hello, World") || ($(WSK_CLI) -i action delete hello && exit 1) + && (echo $$res | grep "Hello, World") || ($(WSK_CLI) -i action delete hello && tail -n 200 ~/tmp/openwhisk/invoker/logs/invoker-local_logs.log ~/tmp/openwhisk/controller/logs/controller-local_logs.log && exit 1) echo "$$(tput setaf 1)deleting the function ...$$(tput sgr0)" $(WSK_CLI) -i action delete hello diff --git a/docker-compose/README.md b/docker-compose/README.md index f3208c3..0611a5b 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -43,16 +43,32 @@ If `PROJECT_HOME` variable is set ( i.e. `PROJECT_HOME=/path/to/openwhisk make q then the command skips downloading the `master` branch and uses instead the source code found in the `PROJECT_HOME` folder. This is useful for working with a local clone, making changes to the code, and run it with `docker-compose`. +## Updating OpenWhisk Invoker or Controller + +To update the OpenWhisk Invoker or Controller without restarting everything, run: + +```bash +make restart-invoker +``` +This command destroys the running Invoker instance, waits for the controller to figure out the invoker is `down`, then it starts a new Invoker, also waiting until it's marked as `up`. + +To do the same with the controller run: + +```bash +make restart-controller +``` + + ## Troubleshooting * ```error: Authenticated user does not have namespace 'guest'; set command failed: Get https://localhost:443/api/v1/namespaces: dial tcp [::1]:443: getsockopt: connection refused``` Make sure nothing runs on the above listed ports. Port 80 might be commonly in use by a local httpd for example. On a Mac, use `sudo lsof -i -P` to find out what process runs on a port. You can turn off Internet Sharing under System Settings > Sharing, or try `sudo /usr/sbin/apachectl stop` to stop httpd. - + * ```error: Unable to invoke action 'hello': There was an internal server error. (code 5)``` Look at the logs in `~/tmp/openwhisk` especially `~/tmp/openwhisk/controller/logs/controller-local_logs.log` that might give more information. This can be an indication that the docker environment doesn't work properly (and on Mac you might need to switch to use [Docker for Mac](https://www.docker.com/docker-mac). - + * Check the [issue tracker](https://github.com/apache/incubator-openwhisk-devtools/issues) for more. # Build diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index 84bbadb..bad9335 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -1,4 +1,4 @@ -version: '2' +version: '3' services: db: image: couchdb:1.6 @@ -40,7 +40,8 @@ services: - db - kafka env_file: - - ./docker-whisk-controller.env + - ./docker-whisk-controller.env # env vars shared + - ~/tmp/openwhisk/local.env # generated during make setup environment: COMPONENT_NAME: controller PORT: 8888 @@ -66,6 +67,9 @@ services: invoker: image: openwhisk/invoker:latest command: /bin/sh -c "/invoker/bin/invoker 0 >> /logs/invoker-local_logs.log 2>&1" + privileged: true + pid: "host" + userns_mode: "host" links: - db:db.docker - kafka:kafka.docker @@ -74,6 +78,7 @@ services: - kafka env_file: - ./docker-whisk-controller.env # env vars shared + - ~/tmp/openwhisk/local.env # generated during make setup environment: COMPONENT_NAME: invoker SERVICE_NAME: invoker0 @@ -92,16 +97,16 @@ services: EDGE_HOST: ${DOCKER_COMPOSE_HOST} EDGE_HOST_APIPORT: 443 - DOCKER_REGISTRY: ${DOCKER_REGISTRY} - DOCKER_IMAGE_PREFIX: ${DOCKER_IMAGE_PREFIX} - INVOKER_CONTAINER_NETWORK: openwhisk_default - WHISK_API_HOST_NAME: https://${DOCKER_COMPOSE_HOST} + WHISK_API_HOST_NAME: ${DOCKER_COMPOSE_HOST} volumes: - ~/tmp/openwhisk/invoker/logs:/logs - /var/run/docker.sock:/var/run/docker.sock - /var/lib/docker/containers:/containers + - ${RUNC_BINARY}:/usr/bin/docker-runc + - /run/runc:/run/runc + - /sys/fs/cgroup:/sys/fs/cgroup ports: - "8085:8085" -- To stop receiving notification emails like this one, please contact ['"commits@openwhisk.apache.org" <commits@openwhisk.apache.org>'].