Sometimes, it’s desirable to store logs or other files on the host itself. To do this with Swarm, you’ll need to ensure the directory exists on the host so you can bind mount it into your log-producing containers. In this example, we’ll assume we want to bind-mount
/opt/my-app-logs on the host.
Add an item to
custom_requirements to declare the preflight check and define its messaging.
# kind: replicated custom_requirements: - id: logdir-exists message: Log Directory Exists details: Log Directory /opt/my-app-logs must exist on the host results: - status: success message: Directory /opt/my-app-logs exists condition: status_code: 0 - status: error message: Directory /opt/my-app-logs does not exist, please create this directory before proceeding condition: status_code: 1 command: id: scheduler timeout: 10 data: swarm: service: "check-dir" # matches the Service name below
# kind: scheduler-swarm section, you’ll want to create another YAML with the metadata tag
# kind: preflight-swarm. The service name should match the
service name above.
--- # kind: preflight-swarm version: "3" services: check-dir: image: busybox:latest volumes: - "/opt:/host/opt" command: ["test","-d","/host/opt/my-app-logs"]