Storagenode on Synology - Docker GUI works fine, but Putty/shell-wise won't mount correctly

Hello, everybody,

I have a problem getting a Storj storage node on my Synology to “run nice”. By “nice” I mean that I can make the copy-paste command in the SSH window (e.g. Putty) commando-based.

If I now follow the instructions from the Storj homepage 1to1, then I get my Docker container to be created with the following command via Putty Shell:

sudo docker container create
-p 28967:28967
-p 14002:14002
-e WALLET=“0x654Dc5f9e0Bafc57XxXxX87dAE94f3700875B51F”
-e EMAIL=“w****@.de"
-e ADDRESS="w
*.de:28967”
-e BANDWIDTH=“20TB”
-e STORAGE=“650GB”
–mount type=bind,source="/volume1/Storj",destination=/app/identity
–mount type=bind,source="/volume1/Storj",destination=/app/config
–name storagenode
storjlabs/storagenode:beta

I don’t get any error message regarding the mounting, i.e. the path is correct (modifying a single character bring “folder not found”-errors). However, I get the following section from the “$ sudo docker container inspect storagenode” command:

sudo docker container inspect storagenode
[
“HostConfig”: {
"Binds: zero,

        "Mounts: [
            {
                "Type": "bind",
                "Source": "/volume1/Storj/",
                "Target": "/app/identity"
            },
            {
                "Type": "bind",
                "Source": "/volume1/Storj/",
                "Target": "/app/config"
            }
        ],
      
    "Mounts": [
        {
            "Type": "bind",
            "Source": "/volume1/Storj",
            "Destination": "/app/identity",
            "Fashion": "",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Type": "bind",
            "Source": "/volume1/Storj",
            "Destination": "/app/config",
            "Fashion": "",
            "RW": true,
            "Propagation": "rprivate"
        }

So, binds zero. Via the new Dashboard of Storj I get an offline message or to be precise: dashboard site not found.

On the Synology web interface, however, there is the GUI app for Docker. There the storage node is now listed and can be edited via GUI. Nothing is mounted under the mount settings there. If I now enter the same directories for “config” and “identity” and start the node everything works fine. The “$ sudo docker container inspect storagenode” command then says:

sudo docker container inspect storagenode
[
“HostConfig”: {
"Binds: [
“/volume1/Storj:/app/identity:rw”,
“/volume1/Storj:/app/config:rw”
],

        "Mounts": [
            {
                "Type": "bind",
                "Source": "/volume1/Storj/",
                "Target": "/app/identity"
            },
            {
                "Type": "bind",
                "Source": "/volume1/Storj/",
                "Target": "/app/config"
            }
        ],
       
    "Mounts": [
  	{
            "Type": "bind",
            "Source": "/volume1/Storj",
            "Destination": "/app/identity",
            "Fashion": "rw",
            "RW": true,
            "Propagation": "rprivate"
        }
        {
            "Type": "bind",
            "Source": "/volume1/Storj",
            "Destination": "/app/config",
            "Fashion": "rw",
            "RW": true,
            "Propagation": "rprivate"
        },

The only difference I can see directly is that the “fashion” is marked with “rw”. And just that the binds are hooked in. So far I have always helped by hand, but that can’t be the permanent solution.

Does anyone have an idea? Is it the “rw”? Is it due to user rights?

If you use the synology gui, it uses the -v volume mounting options. These are not safe to use because it will simply mount a volume inside the container is the mount point isn’t available. This can lead to lost data, so I would advise against using the gui.

This difference probably also explains the difference you see in the inspect output.

Well, I am running on 4 node on my different synology nas using the docker GUI and they run well for 2 months now.
I will recommend using the GUI instead because somehow i tried the command with the mount but it does not mount correctly in the docker instance causing the node to go offline.
Also i notice you are mapping both identity and data into the same volume1/Storj folder which i suppose you are just typo? Because that could be a reason you are getting offline if that is true.
How i did as below.

  1. Create a share folder “Storj”
  2. Under the new Storj folder, create a data and identity folder. Copy your Identity into the identity folder.
  3. Use the docker package and download the latest instance in Registry
  4. Go to Image and choose to launch the instance
  5. Go Advanced Settings, checked auto-start
  6. Go Volume tab, select Add Folder, then choose the Storj/data folder mapping to /app/config and Storj/identity folder mapping to /app/identity
  7. Go to Port Settings tab, set your external port 28967 and container port 28967 with type TCP. You can use different external port if you would like to. Example 28968 to container port 28967. If you want to see the dashboard then map also 14002.
  8. Go to Environment tab, filled in your address, email, wallet, bandwidth, and storage
  9. Apply and Save and volla. Access your NAS ip:28968 and see the instance online.

Above are just my personal experience. Sound a lot of steps as compare to that one docker command line but i find the GUI quite reliable in this sense and touch wood i never get any problem with it.

I’m going to repeat it again, since using the docker gui was mentioned again and the -v mounts were specifically removed from instructions because of nodes not just being offline, but getting disqualified due to lost data. This is simply BAD advise. DO NOT USE the -v mounts that the GUI uses. Your node may have been offline for a bit, but that specific case most likely prevented it from storing data inside the container, which would then get lost. An offline node can be fixed, a disqualified one cannot. You have been warned. I will shut up about it now.

1 Like

hmmm? Tell me where in my posted code there is a mount-type “volume” mentioned?! The mount type says to be “bind”.
I see your point. I do not want to be disqualified. So please help me fix this issue. What went wrong mounting the folders via shell commands?

Is this issue maybe relevant to the content of the config.yaml ? Mine is located directly in the above mentioned “volume1/Storj” folder and looks like this:

path to the certificate chain for this identity
identity.cert-path: “identity/identity.cert”

path to the private key for this identity
identity.key-path: “identity/identity.key”

the public address of the Kademlia node, useful for nodes behind NAT
kademlia.external-address: “w****.de:28967”

operator email address
kademlia.operator.email: “w*@*.de”

operator wallet address
kademlia.operator.wallet: “0x946549XxXxDc5f9e0Bafc97412f87dAE94f370054Gts”

the minimum log level to log
log.level: info

public address to listen on
server.address: “:28967”

log all GRPC traffic to zap logger
server.debug-log-traffic: false

private address to listen on
server.private-address: “127.0.0.1:7778”

total allocated bandwidth in bytes
storage.allocated-bandwidth: 2.0 TB

total allocated disk space in bytes
storage.allocated-disk-space: 650 GB

But I also can post my entire docker container inspect log.

This is what I get using pure CLI with the command block copied from the Storj homepage docs:

sudo docker container inspect storagenode                 [
    {
        "Id": "fb323927f0bf18a2253febd6c8870f1aca66e8e8e1bb87405027eae7e0478f64",
        "Created": "2019-11-12T19:41:15.481054804Z",
        "Path": "/entrypoint",
        "Args": [],
        "State": {
            "Status": "created",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "0001-01-01T00:00:00Z",
            "FinishedAt": "0001-01-01T00:00:00Z",
            "StartedTs": -62135596800,
            "FinishedTs": -62135596800
        },
        "Image": "sha256:e4968555e291b5967f8235d3980431f07be7dc8e9dc68961d789bb7cd030342a",
        "ResolvConfPath": "",
        "HostnamePath": "",
        "HostsPath": "",
        "LogPath": "",
        "Name": "/storagenode",
        "RestartCount": 0,
        "Driver": "aufs",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "db",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {
                "14002/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "14002"
                    }
                ],
                "28967/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "28967"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "shareable",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOARCH=",
                "ADDRESS=wolfgang.heydlauff.de:28967",
                "EMAIL=wolfgang.heydlauff@posteo.de",
                "WALLET=0x949Dc5f9e0Bafc57f412f87dAE94f3700f25B51F",
                "BANDWIDTH=20TB",
                "STORAGE=650GB"
            ],
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DiskQuota": 0,
            "KernelMemory": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": 0,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/volume1/Storj",
                    "Target": "/app/identity"
                },
                {
                    "Type": "bind",
                    "Source": "/volume1/Storj",
                    "Target": "/app/config"
                }
            ],
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": null,
            "Name": "aufs"
        },
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/volume1/Storj",
                "Destination": "/app/identity",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/volume1/Storj",
                "Destination": "/app/config",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "a809285a188c8ac1723e7c80a9baed8add3b7387fa62e7473e7137a5ff7bfd95",
                "Source": "/volume1/@docker/volumes/a809285a188c8ac1723e7c80a9baed8add3b7387fa62e7473e7137a5ff7bfd95/_data",
                "Destination": "/root/.local/share/storj/storagenode",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "fb323927f0bf",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": true,
            "AttachStderr": true,
            "ExposedPorts": {
                "14002/tcp": {},
                "28967/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOARCH=",
                "ADDRESS=wolfgang.heydlauff.de:28967",
                "EMAIL=wolfgang.heydlauff@posteo.de",
                "WALLET=0x949Dc5f9e0Bafc57f412f87dAE94f3700f25B51F",
                "BANDWIDTH=20TB",
                "STORAGE=650GB"
            ],
            "Cmd": null,
            "ArgsEscaped": true,
            "Image": "storjlabs/storagenode:beta",
            "Volumes": {
                "/root/.local/share/storj/storagenode": {}
            },
            "WorkingDir": "/app",
            "Entrypoint": [
                "/entrypoint"
            ],
            "OnBuild": null,
            "Labels": {},
            "DDSM": false
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "",
                    "EndpointID": "",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "",
                    "DriverOpts": null
                }
            }
        }
    }
]

And this is what I get, when I do the same and afterwards in addition mount manually with the Synology docker GUI under the tab “volume” as seen in the following picure:

sudo docker container inspect storagenode
[
    {
        "Id": "fb323927f0bf18a2253febd6c8870f1aca66e8e8e1bb87405027eae7e0478f64",
        "Created": "2019-11-12T19:41:15.481054804Z",
        "Path": "/entrypoint",
        "Args": [],
        "State": {
            "Status": "created",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "0001-01-01T00:00:00Z",
            "FinishedAt": "0001-01-01T00:00:00Z",
            "StartedTs": -62135596800,
            "FinishedTs": -62135596800
        },
        "Image": "sha256:e4968555e291b5967f8235d3980431f07be7dc8e9dc68961d789bb7cd030342a",
        "ResolvConfPath": "",
        "HostnamePath": "",
        "HostsPath": "",
        "LogPath": "",
        "Name": "/storagenode",
        "RestartCount": 0,
        "Driver": "aufs",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/volume1/Storj:/app/config/:rw",
                "/volume1/Storj:/app/identity/:rw"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "db",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {
                "14002/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "14002"
                    }
                ],
                "28967/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "28967"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "shareable",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOARCH=",
                "ADDRESS=wolfgang.heydlauff.de:28967",
                "EMAIL=wolfgang.heydlauff@posteo.de",
                "WALLET=0x949Dc5f9e0Bafc57f412f87dAE94f3700f25B51F",
                "BANDWIDTH=20TB",
                "STORAGE=650GB"
            ],
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 50,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DiskQuota": 0,
            "KernelMemory": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": 0,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/volume1/Storj",
                    "Target": "/app/identity"
                },
                {
                    "Type": "bind",
                    "Source": "/volume1/Storj",
                    "Target": "/app/config"
                }
            ],
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": null,
            "Name": "aufs"
        },
        "Mounts": [
            {
                "Type": "volume",
                "Name": "a809285a188c8ac1723e7c80a9baed8add3b7387fa62e7473e7137a5ff7bfd95",
                "Source": "/volume1/@docker/volumes/a809285a188c8ac1723e7c80a9baed8add3b7387fa62e7473e7137a5ff7bfd95/_data",
                "Destination": "/root/.local/share/storj/storagenode",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "bind",
                "Source": "/volume1/Storj",
                "Destination": "/app/config",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/volume1/Storj",
                "Destination": "/app/identity",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        "Config": {
            "Hostname": "fb323927f0bf",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": true,
            "AttachStderr": true,
            "ExposedPorts": {
                "14002/tcp": {},
                "28967/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOARCH=",
                "ADDRESS=wolfgang.heydlauff.de:28967",
                "EMAIL=wolfgang.heydlauff@posteo.de",
                "WALLET=0x949Dc5f9e0Bafc57f412f87dAE94f3700f25B51F",
                "BANDWIDTH=20TB",
                "STORAGE=650GB"
            ],
            "Cmd": null,
            "ArgsEscaped": true,
            "Image": "storjlabs/storagenode:beta",
            "Volumes": {
                "/root/.local/share/storj/storagenode": {}
            },
            "WorkingDir": "/app",
            "Entrypoint": [
                "/entrypoint"
            ],
            "OnBuild": null,
            "Labels": {},
            "DDSM": false
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "",
                    "EndpointID": "",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "",
                    "DriverOpts": null
                }
            }
        }
    }
]

in your docker command to run a container is better to use the docker run instead of docker create container.
The second concern - you have used the same path for both data and identity, I think it’s typo.
Please, show the output of these commands:

docker ps -a storagenode

ls -l /volume1/Storj

Dear Alexey,

thanks a lot for the effort.

My docker ps -a command lists the running container:

/$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb323927f0bf storjlabs/storagenode:beta “/entrypoint” 4 hours ago Up 4 hours 0.0.0.0:14002->14002/tcp, 0.0.0.0:28967->28967/tcp storagenode

And the folder content of /volume1/Storj/ is as follows:
Unbenannt

Every file and folder is chmod 777.
“storage”-Folder containing the cloud-files uploaded to my node. All other files are config- and identity-wise. As I understood the installation manual, I have to point the /app/identity/ to the folder where the identity-stuff can be found (is /volume1/Storj/) and the /app/config/ folder is to point to the folder where the config.yaml can be found (also is in /volume1/Storj/).

As you can see in my initial posted “docker container inspect storagenode”-output, “the GUI-corrected Mount”, pointing to the same folder works w/o problems:
Unbenannt2

I am eager to learn where you guys store your identity and your config file and the other files. Has the config-file to be within the “storage”-folder??

This is very bad policy for certificates and private keys. I’m not sure if SN software is checking permissions, but ssh would refuse to accept a private key with 777 permissions.

The keys on my default GNU/Linux identity are 600 for ca.key, identity.key, and revocations.db … which seems correct. The certs are 644 … which also seems correct.

The default location on GNU/Linux is … or was… ~/.local/share/storj/identity/storagenode if one is following along the instructions (last time I checked was Sept 2019)

You should remove the config.yaml and restart the container. Because now some options are not correct. The storagenode should recreate the config.yaml with default options.

OK folks. Now it is working.

Sadly I can not rebuild what change I did that solved it. I removed the kademlia from the Storj-Folder. I also removed the config.yaml. By starting a new container, a new config.yaml is created in my Storj Folder. Although the content of that new file seems to be an empty-standard. See:

.# how frequently bandwidth usage rollups are calculated
.# bandwidth.interval: 1h0m0s

.# how frequently expired pieces are collected
.# collector.interval: 1h0m0s

.# use color in user interface
.# color: false

.# server address of the api gateway and frontend app
.# console.address: 127.0.0.1:14002

.# path to static resources
.# console.static-dir: ""

.# the public address of the node, useful for nodes behind NAT
contact.external-address: ""

.# how frequently the node contact chore should run
.# contact.interval: 1h0m0s

.# Maximum Database Connection Lifetime, -1ns means the stdlib default
.# db.conn_max_lifetime: -1ns

.# Maximum Amount of Idle Database connections, -1 means the stdlib default
.# db.max_idle_conns: 20

.# Maximum Amount of Open Database connections, -1 means the stdlib default
.# db.max_open_conns: 25

.# address to listen on for debug endpoints
.# debug.addr: 127.0.0.1:0

.# If set, a path to write a process trace SVG to
.# debug.trace-out: ""

.# open config in default editor
.# edit-conf: false

.# how often to run the chore to check for satellites for the node to exit.
.# graceful-exit.chore-interval: 15m0s

.# the minimum acceptable bytes that an exiting node can transfer per second to the new node
.# graceful-exit.min-bytes-per-second: 128 B

.# the minimum duration for downloading a piece from storage nodes before timing out
.# graceful-exit.min-download-timeout: 2m0s

.# number of concurrent transfers per graceful exit worker
.# graceful-exit.num-concurrent-transfers: 1

.# number of workers to handle satellite exits
.# graceful-exit.num-workers: 3

.# path to the certificate chain for this identity
identity.cert-path: identity/identity.cert

.# path to the private key for this identity
identity.key-path: identity/identity.key

.# if true, log function filename and line number
.# log.caller: false

.# if true, set logging to development mode
.# log.development: false

.# configures log encoding. can either be 'console' or 'json'
.# log.encoding: console

.# the minimum log level to log
log.level: info

.# can be stdout, stderr, or a filename
.# log.output: stderr

.# if true, log stack traces
.# log.stack: false

.# address to send telemetry to
.# metrics.addr: collectora.storj.io:9000

.# application name for telemetry identification
.# metrics.app: storagenode

.# application suffix
.# metrics.app-suffix: -release

.# instance id prefix
.# metrics.instance-prefix: ""

.# how frequently to send up telemetry
.# metrics.interval: 1m0s

.# path to log for oom notices
.# monkit.hw.oomlog: /var/log/kern.log

.# maximum duration to wait before requesting data
.# nodestats.max-sleep: 5m0s

.# how often to sync reputation
.# nodestats.reputation-sync: 4h0m0s

.# how often to sync storage
.# nodestats.storage-sync: 12h0m0s

.# operator email address
operator.email: ""

.# operator wallet address
operator.wallet: ""

.# how many concurrent retain requests can be processed at the same time.
.# retain.concurrency: 5

.# allows for small differences in the satellite and storagenode clocks
.# retain.max-time-skew: 24h0m0s

.# allows configuration to enable, disable, or test retain requests from the satellite. Options: (disabled/enabled/debug)
.# retain.status: disabled

.# public address to listen on
server.address: :28967

.# log all GRPC traffic to zap logger
server.debug-log-traffic: false

.# if true, client leaves may contain the most recent certificate revocation for the current certificate
.# server.extensions.revocation: true

.# if true, client leaves must contain a valid "signed certificate extension" (NB: verified against certs in the peer ca whitelist; i.e. if true, a whitelist must be provided)
.# server.extensions.whitelist-signed-leaf: false

.# path to the CA cert whitelist (peer identities must be signed by one these to be verified). this will override the default peer whitelist
.# server.peer-ca-whitelist-path: ""

.# identity version(s) the server will be allowed to talk to
.# server.peer-id-versions: latest

.# private address to listen on
server.private-address: 127.0.0.1:7778

.# url for revocation database (e.g. bolt://some.db OR redis://127.0.0.1:6378?db=2&password=abc123)
.# server.revocation-dburl: bolt://config/revocations.db

.# if true, uses peer ca whitelist checking
.# server.use-peer-ca-whitelist: true

.# total allocated bandwidth in bytes
storage.allocated-bandwidth: 2.0 TB

.# total allocated disk space in bytes
storage.allocated-disk-space: 1.0 TB

.# how frequently Kademlia bucket should be refreshed with node stats
.# storage.k-bucket-refresh-interval: 1h0m0s

.# path to store data in
.# storage.path: config/storage

.# a comma-separated list of approved satellite node urls
.# storage.whitelisted-satellites: 12EayRS2V1kEsWESU9QMRseFhdxYxKicsiFmxrsLZHeLUtdps3S@us-central-1.tardigrade.io:7777,118UWpMCHzs6CvSgWd9BfFVjw5K9pZbJjkfZJexMtSkmKxvvAW@satellite.stefan-benten.de:7777,121RTSDpyNZVcEU84Ticf2L1ntiuUimbWgfATz21tuvgk3vzoA6@asia-east-1.tardigrade.io:7777,12L9ZFwhzVpuEKMUNUqkaTLGzwY9G24tbiigLiXpmZWKwmcNDDs@europe-west-1.tardigrade.io:7777

.# how often the space used cache is synced to persistent storage
.# storage2.cache-sync-interval: 1h0m0s

.# how soon before expiration date should things be considered expired
.# storage2.expiration-grace-period: 48h0m0s

.# how many concurrent requests are allowed, before uploads are rejected. 0 represents unlimited.
.# storage2.max-concurrent-requests: 0

.# how frequently Kademlia bucket should be refreshed with node stats
.# storage2.monitor.interval: 1h0m0s

.# how much bandwidth a node at minimum has to advertise
.# storage2.monitor.minimum-bandwidth: 500.0 GB

.# how much disk space a node at minimum has to advertise
.# storage2.monitor.minimum-disk-space: 500.0 GB

.# how long after OrderLimit creation date are OrderLimits no longer accepted
.# storage2.order-limit-grace-period: 24h0m0s

.# length of time to archive orders before deletion
.# storage2.orders.archive-ttl: 168h0m0s

.# duration between archive cleanups
.# storage2.orders.cleanup-interval: 24h0m0s

.# timeout for dialing satellite during sending orders
.# storage2.orders.sender-dial-timeout: 1m0s

.# duration between sending
.# storage2.orders.sender-interval: 1h0m0s

.# timeout for sending
.# storage2.orders.sender-timeout: 1h0m0s

.# allows for small differences in the satellite and storagenode clocks
.# storage2.retain-time-buffer: 48h0m0s

.# Interval to check the version
.# version.check-interval: 15m0s

.# Request timeout for version checks
.# version.request-timeout: 1m0s

.# server address to check its version against
.# version.server-address: https://version.storj.io

Nevertheless, my “sudo docker container inspect storagenode” shows the correct email adresse and bandwidth regulation etc. See:

"UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOARCH=",
                "ADDRESS=w*****.de:28967",
                "EMAIL=w**********@****.de",
                "WALLET=0x654654xx4x654x57f412f87dAE94f3700f25B51F",
                "BANDWIDTH=20TB",
                "STORAGE=650GB"
            ],
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,

As posted in the very beginning, the Host-Config Bind still shows “null”

"MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "db",
                "Config": {}
            },

I assume, as BrightSilence menthioned only the mounted volumes are listed here (as the Docker GUI sets them up).

Further on in the storage inspection output the “Mounts” with type “Bind” seem to be correct:

"CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/volume1/Storj",
                    "Target": "/app/identity"
                },
                {
                    "Type": "bind",
                    "Source": "/volume1/Storj",
                    "Target": "/app/config"
                }
            ],

Dashboard and Webinterface tell me that my node is Online and I see files up-/downloaded. So I am very confident that everything is now running as it should.

Summary: A pure CLI setup is working find now. I do not have to use the GUI. I sadly am unsure why it did not work in the first place. The config.yaml created when starting the container is empty for any reason but the container knows about the correct environment values.