Tag Archives: docker
mounterbank for mocking and stubbing http services (rest+graphql+grpc)
http://www.mbtest.org/docs/api/stubs can be used to stub http(s)/tcp/smtp protocols. And has community plugins for grpc, graphql, websockets. You can configure it with imposters.ejs like below:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "port": 80, "protocol": "http", "defaultResponse": { "statusCode": 404, "headers": {} }, "stubs": [ <% include stubs/service1.json %>, <% include stubs/service2.json %>, <% include stubs/service3.json %> ] } |
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 |
version: "3.5" services: mountebank: container_name: mountebank image: jkris/mountebank:latest volumes: - ./:/mountebank ports: - "15050:80" command: --configfile /mountebank/imposters.ejs --allowInjection |
Fixing docker does not want to update images
If you run docker pull, and you see an error like failed to register layer: Error processing tar file(exit status 2): fatal error: runtime: out of memory, there could be 2 reasons. Obvious one — not enough disk space for docker. You can fix it with
1 2 |
docker system prune -af docker volume ls -qf dangling=true |
WARNING: It will remove your unused resources like …
Create SQS queues on localstack container start
Put this file to your filesystem as ←anyname.sh→:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/usr/bin/env bash set -euo pipefail # enable debug # set -x echo "configuring sqs" echo "===================" LOCALSTACK_HOST=localhost AWS_REGION=eu-central-1 # https://docs.aws.amazon.com/cli/latest/reference/sqs/create-queue.html create_queue() { local QUEUE_NAME_TO_CREATE=$1 awslocal --endpoint-url=http://${LOCALSTACK_HOST}:4566 sqs create-queue --queue-name ${QUEUE_NAME_TO_CREATE} --region ${AWS_REGION} --attributes VisibilityTimeout=30 } create_queue "queue2" create_queue "queue1" |
For instance, ./localstack_bootstrap/sqs_bootstrap.sh. Don’t forget to run chmod +x ./localstack_bootstrap/sqs_bootstrap.sh. Add this line to your docker-compose.yml: — ./localstack_bootstrap:/docker-entrypoint-initaws.d/. So it could look like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
services: localstack: container_name: aws_sqs hostname: sqs image: localstack/localstack:latest environment: - AWS_DEFAULT_REGION=ap-southeast-1 - EDGE_PORT=4566 - SERVICES=sqs ports: - '4566:4566' volumes: - "${TMPDIR:-/tmp/localstack}:/tmp/localstack" - "/var/run/docker.sock:/var/run/docker.sock" - ./localstack_bootstrap:/docker-entrypoint-initaws.d/ |
Then your queues can be reached by URLs http://localhost:4566/000000000000/queue1 and http://localhost:4566/000000000000/queue2. Further reading: https://docs.aws.amazon.com/cli/latest/reference/sqs/create-queue.html https://joerg-pfruender.github.io/software/docker/microservices/testing/2020/01/25/Localstack_in_Docker.html
Using tcpdump for k8s pods
You need wireshark to be installed on your local machine — download (more on this below). If you don’t have tcpdump installed inside the pod, you can install it with
1 2 3 4 5 |
# get pod name kubectl get po -Lversion,cfg,infra-cfg -lapp=<pod-tag> kubectl exec -it <pod-name> sh # inside the pod, alpine apk add tcpdump |
Then, on your local machine:
1 |
kubectl exec <pod-name> -- tcpdump -i eth0 -w - | wireshark -k -i - |
If you want to see packets in grpc/http2, you can add a rule in Wireshark. For this, click …
Datadog in a docker for integration tests and local dev
1 |
DOCKER_CONTENT_TRUST=1 docker run --rm --name dd-agent -p 8126:8126 -v /var/run/docker.sock:/var/run/docker.sock:ro -v /proc/:/host/proc/:ro -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro -e DD_API_KEY=REPLACE_WITH_NEW_KEY -e DD_SITE=datadoghq.eu datadog/agent |
mmock for mocking microservices
It is a very easy to set up though pretty powerful tool with support for delays and handling query params. It also has a console for checking all the requests and corresponding responses matched. Here it is https://github.com/jmartin82/mmock. Below I describe a way to use it with docker-compose for local development.
XDebug inside a docker container
That’s how you can debug your php app running in a docker container.
Integration tests with testcontainers-go
Here is the go library that simplifies integration tests with docker containers — https://github.com/testcontainers/testcontainers-go. That’s how you can use it to test sql — https://github.com/testcontainers/testcontainers-go/blob/master/docs/examples/cockroachdb.md. Project documentation — https://golang.testcontainers.org/features/docker_compose/ The idea is to prepare the environment, build your app, then make requests and check the DB state.
Read logs from docker container
1 |
tail -f `docker inspect --format='{{.LogPath}}' [containername]` |
Postgres in docker: random «unique violation» errors
While running postgres in docker (for development, of course), from time to time I just run into errors like «Duplicate Key Value Violates Unique Constraint». I found the solution (thanks to this answer, for sure — https://stackoverflow.com/a/47089825/801426): if you have a table called «[table]», just do this
1 |
SELECT setval('[table]_id_seq', (SELECT MAX(id) FROM [table])); |