Docker-Compose
Docker Compose für Standardinstallationen
Auf dieser Seite befinden sich einige Docker Compose Beispiele für verschiedenen Anwendungsfälle.
OPC Router Runtime
Das OPC Router Runtime Image beinhaltet eine MongoDB.
services:
opc-router:
image: opcrouter/runtime:latest
restart: unless-stopped
ports:
# Ports für die Legacy Redundanz oder OPC Server müssen zusätzlich freigegeben werden
# Für 5 OPC UA Server könnte das so aussehen
# - "49420-49424:49420-49424"
# Der Standard-Port für die Legacy Redundanz ist 49954
# - "49954:49554"
- "8080:8080"
environment:
- OR_I_ACCEPT_EULA=true
- INITIAL_USERNAME=<Nuzername>
- INITIAL_PASSWORD=<Passwort>
volumes:
- opcrouter-data:/data
- opcrouter-logs:/var/log/opcrouter
volumes:
opcrouter-data:
opcrouter-logs:
OPC Router Service
Das OPC Router Service Image enthält im Gegensatz zum Runtime Image keine Interne MongoDB. Deshalb muss eine externen MongoDB angebunden werden.
services:
opc-router:
image: opcrouter/service:latest
restart: unless-stopped
ports:
# Ports für die Legacy Redundanz oder OPC Server müssen zusätzlich freigegeben werden
# Für 5 OPC UA Server könnte das so aussehen
# - "49420-49424:49420-49424"
# Der Standard-Port für die Legacy Redundanz ist 49954
# - "49954:49554"
- "8080:8080"
environment:
- OR_I_ACCEPT_EULA=true
- INITIAL_USERNAME=<Nuzername>
- INITIAL_PASSWORD=<Passwort>
# Der Connection String für die Datenbankverbindung
- OR_DATABASE_CONNECTION=<MongoDB Connection-String>
volumes:
- opcrouter-data:/data
- opcrouter-logs:/var/log/opcrouter
volumes:
opcrouter-data:
opcrouter-logs:
Docker Compose für Siemens Industrial Edge
services:
opcrouter:
depends_on:
- opcrouter-database
image: 'opcrouter/service:5.2.5007.143'
restart: unless-stopped
entrypoint:
- /bin/bash
- '-c'
- |
json=$$(cat "/cfg-data/schema.json")
while [[ $$json =~ \"([^\"]+)\":\s*\"(([file://.|[%5e/%22%5d)*)/%22|/%22(%5b%5e/%22%5d+)/%22:/s*(%5b%5e,%7d]\\.|[^\"])*)\"|\"([^\"]+)\":\s*([^,}]+) ]]; do
if [[ $${BASH_REMATCH[2]} ]]; then
key="$${BASH_REMATCH[1]}"
value="$${BASH_REMATCH[2]}"
else
key="$${BASH_REMATCH[4]}"
value="$${BASH_REMATCH[5]}"
fi
if [[ $$value =~ ^\"(.*)\"$ ]]; then
value="$${BASH_REMATCH[1]}"
fi
unescaped_key=$$(echo $$key | sed 's/\\\\/\\/g' | sed 's/\\"/"/g')
unescaped_value=$$(echo $$value | sed 's/\\\\/\\/g' | sed 's/\\"/"/g')
eval export $$unescaped_key='$$unescaped_value'
json=$$(echo "$$json" | sed "s/\"$$key\":\(\"[^\"]*\"\|[^,}]*\),\\?//")
done
/init
environment:
OR_DATABASE_CONNECTION_STRING: 'mongodb://opcrouter-database:27017'
OR_DISABLE_AUTH: 'true'
OR_I_ACCEPT_EULA: 'true'
WEB_BASE_PATH: /opcrouter
volumes:
- 'opc-router-data:/data'
- 'opc-router-logs:/var/log/opcrouter'
- './publish/:/publish/'
- './cfg-data/:/cfg-data/'
mem_limit: 2gb
networks:
- proxy-redirect
- internal
logging:
options:
max-size: 20m
max-file: '5'
driver: json-file
opcrouter-database:
image: 'mongo:4.4.29-focal'
restart: always
entrypoint:
- /bin/bash
- '-c'
- |
if [ -f /data/db/mongod.lock ]; then
echo "[DB Initialization] Existing MongoDB database detected"
echo "[DB Initialization] Setting owner for database folder"
chown -R mongodb:mongodb /data/db
mongod --replSet rs0 > /dev/null &
max_attempts=30
attempts=0
echo "[DB Initialization] Waiting for MongoDB to be available..."
while [[ $$attempts -lt $$max_attempts ]];
do
output=$$(mongo --quiet --eval 'var result = db.runCommand({ ping: 1 }); if (result.ok == 1) { print("OK"); } else { print("NOT OK"); }' 2>&1)
if [[ "$$output" == "OK" ]]; then
echo "[DB Initialization] MongoDB is available"
break
fi
echo "[DB Initialization] Waiting for MongoDB to start... (Attempt $$((attempts + 1)) of $$max_attempts)"
sleep 1
attempts=$$((attempts + 1))
done
echo "[DB Initialization] Trying to reinitialize replica set"
replica_config="{_id: \"rs0\", members: [{ _id: 0, host: \"127.0.0.1:27017\" }]}, { force: true }"
mongo --eval "try { rs.initiate() } catch { rs.reconfig($${replica_config}) }"
echo "[DB Initialization] Reinitialization finished"
echo "[DB Initialization] Restarting MongoDB"
mongod --shutdown
wait
docker-entrypoint.sh mongod --replSet rs0
else
echo "[DB Initialization] No existing MongoDB database detected"
chown -R mongodb:mongodb /data/db
docker-entrypoint.sh mongod --replSet rs0
fi
volumes:
- 'opc-router-db:/data/db'
- './publish/:/publish/'
- './cfg-data/:/cfg-data/'
mem_limit: 2gb
networks:
- internal
logging:
driver: json-file
options:
max-size: 20m
max-file: '5'
networks:
proxy-redirect:
external:
name: proxy-redirect
internal:
internal: true
volumes:
opc-router-db: null
opc-router-logs: null
opc-router-data: null