67ebcd6dcfadded an exception for the "host-gateway" magic value to the validation rules, but didn't add thise value to any of the tests. This patch adds the magic value to tests, to verify the validation is skipped for this magic value. Note that validation on the client side is "optional" and mostly done to provide a more user-friendly error message for regular values (IP-addresses). Signed-off-by: Sebastiaan van Stijn <github@gone.nl> (cherry picked from commitf88ae74135) Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
412 lines
8.7 KiB
YAML
412 lines
8.7 KiB
YAML
version: "3.8"
|
|
|
|
services:
|
|
foo:
|
|
|
|
build:
|
|
context: ./dir
|
|
dockerfile: Dockerfile
|
|
args:
|
|
foo: bar
|
|
target: foo
|
|
network: foo
|
|
cache_from:
|
|
- foo
|
|
- bar
|
|
labels: [FOO=BAR]
|
|
|
|
|
|
cap_add:
|
|
- ALL
|
|
|
|
cap_drop:
|
|
- NET_ADMIN
|
|
- SYS_ADMIN
|
|
|
|
cgroup_parent: m-executor-abcd
|
|
|
|
# String or list
|
|
command: bundle exec thin -p 3000
|
|
# command: ["bundle", "exec", "thin", "-p", "3000"]
|
|
|
|
configs:
|
|
- config1
|
|
- source: config2
|
|
target: /my_config
|
|
uid: '103'
|
|
gid: '103'
|
|
mode: 0440
|
|
|
|
container_name: my-web-container
|
|
|
|
depends_on:
|
|
- db
|
|
- redis
|
|
|
|
deploy:
|
|
mode: replicated
|
|
replicas: 6
|
|
labels: [FOO=BAR]
|
|
rollback_config:
|
|
parallelism: 3
|
|
delay: 10s
|
|
failure_action: continue
|
|
monitor: 60s
|
|
max_failure_ratio: 0.3
|
|
order: start-first
|
|
update_config:
|
|
parallelism: 3
|
|
delay: 10s
|
|
failure_action: continue
|
|
monitor: 60s
|
|
max_failure_ratio: 0.3
|
|
order: start-first
|
|
resources:
|
|
limits:
|
|
cpus: '0.001'
|
|
memory: 50M
|
|
reservations:
|
|
cpus: '0.0001'
|
|
memory: 20M
|
|
generic_resources:
|
|
- discrete_resource_spec:
|
|
kind: 'gpu'
|
|
value: 2
|
|
- discrete_resource_spec:
|
|
kind: 'ssd'
|
|
value: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
delay: 5s
|
|
max_attempts: 3
|
|
window: 120s
|
|
placement:
|
|
constraints: [node=foo]
|
|
max_replicas_per_node: 5
|
|
preferences:
|
|
- spread: node.labels.az
|
|
endpoint_mode: dnsrr
|
|
|
|
devices:
|
|
- "/dev/ttyUSB0:/dev/ttyUSB0"
|
|
|
|
# String or list
|
|
# dns: 8.8.8.8
|
|
dns:
|
|
- 8.8.8.8
|
|
- 9.9.9.9
|
|
|
|
# String or list
|
|
# dns_search: example.com
|
|
dns_search:
|
|
- dc1.example.com
|
|
- dc2.example.com
|
|
|
|
domainname: foo.com
|
|
|
|
# String or list
|
|
# entrypoint: /code/entrypoint.sh -p 3000
|
|
entrypoint: ["/code/entrypoint.sh", "-p", "3000"]
|
|
|
|
# String or list
|
|
# env_file: .env
|
|
env_file:
|
|
- ./example1.env
|
|
- ./example2.env
|
|
|
|
# Mapping or list
|
|
# Mapping values can be strings, numbers or null
|
|
# Booleans are not allowed - must be quoted
|
|
environment:
|
|
BAZ: baz_from_service_def
|
|
QUX:
|
|
# environment:
|
|
# - RACK_ENV=development
|
|
# - SHOW=true
|
|
# - SESSION_SECRET
|
|
|
|
# Items can be strings or numbers
|
|
expose:
|
|
- "3000"
|
|
- 8000
|
|
|
|
external_links:
|
|
- redis_1
|
|
- project_db_1:mysql
|
|
- project_db_1:postgresql
|
|
|
|
# Mapping or list
|
|
# Mapping values must be strings
|
|
# extra_hosts:
|
|
# somehost: "162.242.195.82"
|
|
# otherhost: "50.31.209.229"
|
|
# host.docker.internal: "host-gateway"
|
|
extra_hosts:
|
|
- "somehost:162.242.195.82"
|
|
- "otherhost:50.31.209.229"
|
|
- "host.docker.internal:host-gateway"
|
|
|
|
hostname: foo
|
|
|
|
healthcheck:
|
|
test: echo "hello world"
|
|
interval: 10s
|
|
timeout: 1s
|
|
retries: 5
|
|
start_period: 15s
|
|
|
|
# Any valid image reference - repo, tag, id, sha
|
|
image: redis
|
|
# image: ubuntu:14.04
|
|
# image: tutum/influxdb
|
|
# image: example-registry.com:4000/postgresql
|
|
# image: a4bc65fd
|
|
# image: busybox@sha256:38a203e1986cf79639cfb9b2e1d6e773de84002feea2d4eb006b52004ee8502d
|
|
|
|
ipc: host
|
|
|
|
# Mapping or list
|
|
# Mapping values can be strings, numbers or null
|
|
labels:
|
|
com.example.description: "Accounting webapp"
|
|
com.example.number: 42
|
|
com.example.empty-label:
|
|
# labels:
|
|
# - "com.example.description=Accounting webapp"
|
|
# - "com.example.number=42"
|
|
# - "com.example.empty-label"
|
|
|
|
links:
|
|
- db
|
|
- db:database
|
|
- redis
|
|
|
|
logging:
|
|
driver: syslog
|
|
options:
|
|
syslog-address: "tcp://192.168.0.42:123"
|
|
|
|
mac_address: 02:42:ac:11:65:43
|
|
|
|
# network_mode: "bridge"
|
|
# network_mode: "host"
|
|
# network_mode: "none"
|
|
# Use the network mode of an arbitrary container from another service
|
|
# network_mode: "service:db"
|
|
# Use the network mode of another container, specified by name or id
|
|
# network_mode: "container:some-container"
|
|
network_mode: "container:0cfeab0f748b9a743dc3da582046357c6ef497631c1a016d28d2bf9b4f899f7b"
|
|
|
|
networks:
|
|
some-network:
|
|
aliases:
|
|
- alias1
|
|
- alias3
|
|
other-network:
|
|
ipv4_address: 172.16.238.10
|
|
ipv6_address: 2001:3984:3989::10
|
|
other-other-network:
|
|
|
|
pid: "host"
|
|
|
|
ports:
|
|
- 3000
|
|
- "3001-3005"
|
|
- "8000:8000"
|
|
- "9090-9091:8080-8081"
|
|
- "49100:22"
|
|
- "127.0.0.1:8001:8001"
|
|
- "127.0.0.1:5000-5010:5000-5010"
|
|
|
|
privileged: true
|
|
|
|
read_only: true
|
|
|
|
restart: always
|
|
|
|
secrets:
|
|
- secret1
|
|
- source: secret2
|
|
target: my_secret
|
|
uid: '103'
|
|
gid: '103'
|
|
mode: 0440
|
|
|
|
security_opt:
|
|
- label=level:s0:c100,c200
|
|
- label=type:svirt_apache_t
|
|
|
|
stdin_open: true
|
|
|
|
stop_grace_period: 20s
|
|
|
|
stop_signal: SIGUSR1
|
|
|
|
sysctls:
|
|
net.core.somaxconn: 1024
|
|
net.ipv4.tcp_syncookies: 0
|
|
|
|
# String or list
|
|
# tmpfs: /run
|
|
tmpfs:
|
|
- /run
|
|
- /tmp
|
|
|
|
tty: true
|
|
|
|
ulimits:
|
|
# Single number or mapping with soft + hard limits
|
|
nproc: 65535
|
|
nofile:
|
|
soft: 20000
|
|
hard: 40000
|
|
|
|
user: someone
|
|
|
|
volumes:
|
|
# Just specify a path and let the Engine create a volume
|
|
- /var/lib/mysql
|
|
# Specify an absolute path mapping
|
|
- /opt/data:/var/lib/mysql
|
|
# Path on the host, relative to the Compose file
|
|
- .:/code
|
|
- ./static:/var/www/html
|
|
# User-relative path
|
|
- ~/configs:/etc/configs/:ro
|
|
# Named volume
|
|
- datavolume:/var/lib/mysql
|
|
- type: bind
|
|
source: ./opt
|
|
target: /opt
|
|
consistency: cached
|
|
- type: tmpfs
|
|
target: /opt
|
|
tmpfs:
|
|
size: 10000
|
|
|
|
working_dir: /code
|
|
x-bar: baz
|
|
x-foo: bar
|
|
|
|
networks:
|
|
# Entries can be null, which specifies simply that a network
|
|
# called "{project name}_some-network" should be created and
|
|
# use the default driver
|
|
some-network:
|
|
|
|
other-network:
|
|
driver: overlay
|
|
|
|
driver_opts:
|
|
# Values can be strings or numbers
|
|
foo: "bar"
|
|
baz: 1
|
|
|
|
ipam:
|
|
driver: overlay
|
|
# driver_opts:
|
|
# # Values can be strings or numbers
|
|
# com.docker.network.enable_ipv6: "true"
|
|
# com.docker.network.numeric_value: 1
|
|
config:
|
|
- subnet: 172.16.238.0/24
|
|
# gateway: 172.16.238.1
|
|
- subnet: 2001:3984:3989::/64
|
|
# gateway: 2001:3984:3989::1
|
|
|
|
labels:
|
|
foo: bar
|
|
|
|
external-network:
|
|
# Specifies that a pre-existing network called "external-network"
|
|
# can be referred to within this file as "external-network"
|
|
external: true
|
|
|
|
other-external-network:
|
|
# Specifies that a pre-existing network called "my-cool-network"
|
|
# can be referred to within this file as "other-external-network"
|
|
external:
|
|
name: my-cool-network
|
|
x-bar: baz
|
|
x-foo: bar
|
|
|
|
volumes:
|
|
# Entries can be null, which specifies simply that a volume
|
|
# called "{project name}_some-volume" should be created and
|
|
# use the default driver
|
|
some-volume:
|
|
|
|
other-volume:
|
|
driver: flocker
|
|
|
|
driver_opts:
|
|
# Values can be strings or numbers
|
|
foo: "bar"
|
|
baz: 1
|
|
labels:
|
|
foo: bar
|
|
|
|
another-volume:
|
|
name: "user_specified_name"
|
|
driver: vsphere
|
|
|
|
driver_opts:
|
|
# Values can be strings or numbers
|
|
foo: "bar"
|
|
baz: 1
|
|
|
|
external-volume:
|
|
# Specifies that a pre-existing volume called "external-volume"
|
|
# can be referred to within this file as "external-volume"
|
|
external: true
|
|
|
|
other-external-volume:
|
|
# Specifies that a pre-existing volume called "my-cool-volume"
|
|
# can be referred to within this file as "other-external-volume"
|
|
# This example uses the deprecated "volume.external.name" (replaced by "volume.name")
|
|
external:
|
|
name: my-cool-volume
|
|
|
|
external-volume3:
|
|
# Specifies that a pre-existing volume called "this-is-volume3"
|
|
# can be referred to within this file as "external-volume3"
|
|
name: this-is-volume3
|
|
external: true
|
|
x-bar: baz
|
|
x-foo: bar
|
|
|
|
configs:
|
|
config1:
|
|
file: ./config_data
|
|
labels:
|
|
foo: bar
|
|
config2:
|
|
external:
|
|
name: my_config
|
|
config3:
|
|
external: true
|
|
config4:
|
|
name: foo
|
|
x-bar: baz
|
|
x-foo: bar
|
|
|
|
secrets:
|
|
secret1:
|
|
file: ./secret_data
|
|
labels:
|
|
foo: bar
|
|
secret2:
|
|
external:
|
|
name: my_secret
|
|
secret3:
|
|
external: true
|
|
secret4:
|
|
name: bar
|
|
x-bar: baz
|
|
x-foo: bar
|
|
x-bar: baz
|
|
x-foo: bar
|
|
x-nested:
|
|
bar: baz
|
|
foo: bar
|