Docker for several nodes installation for Windows

Hi guys!

Docker is new for me, I will ask questions

Initial data:

  1. Motherboard ga-j1800n-d2, 4Gb, n Intel® Dual-Core Celeron® J1800 SoC (2.41 GHz)
  2. Windows 11 Pro
  3. HDD 2*Seagate Barracuda 1 ТБ ST31000333AS

Questions:

  1. Processor have 2 cores, does it mean, what I can setup only 2 Storj nodes on this motherboard?

  2. If I understood right, motherboard doesn’t support WSL2, so only way is to install Docker 2.1.0.5


    I understood about WSL2 from here:

    Virtualisation in BIOS is enabled
    Is it correct?

  3. Before I started detailed study of issue, I installed latest version of Docker and I seen what interface was looking like this:
    image
    After installation of Docker 2.1.0.5 interface is looking only like this:


    How to find Docker command prompt to wright all this command?

Here I stuck. Could you, please, help!

Regards,
Alexander

Hey!

When it’s asking you to run that command, you can do that from the command prompt window. Once Docker Desktop is installed, you should be able to run docker run commands from there. The Getting Started section, according to Docker’s documentation, is at http://localhost, which should help you access your dashboard as you did before.

Right now this is only a legal requirement that is not enforced in code in any way. In theory you’d be violating the terms and conditions by hosting more nodes than two, making it ok for Storj to disqualify your nodes. In practice, well…

Sorry, I can’t answer your Docker questions, I’m not using Windows.

1 Like

@Aka985 I guess what Toyoo means is that although we can’t encourage you to go against TOS, FYI some SNOs do run more than a node per cpu core, and as long as the cpu is beefy enough for processing all your nodes correctly, it works, and there has been no known cases of SNOs disqualified for doing so, so far.

That said, that wouldn’t be a good idea on some old Raspberry pi devices, for instance :slight_smile:

Although that’s true, that would mean StorjLabs could kill many node based on that criteria. I feel like that wouldn’t be a smart move because even though slow nodes may not deliver data quick enough, they still operate as backup storage for the network.
In fact, a slow node is more of an issue for the SNO as they will miss out on potential earning (as they will lose most races), whereas it still is usefull for the network.

That’s my 2 cents anyway ^^


(And happy anniversary to you @Toyoo :smile:)

1 Like

You may also try to use the latest docker desktop, and report back how good it working for you - we did not have a feedback about newest version of the docker desktop working not in wsl2 mode.

If your experience would be good, we may remove this warning from our documentation.

My nodes working with the latest docker desktop and wsl2 engine more than a year. No problems so far.

Did you check the MS documentation regarding wsl2? Because I can see, that virtualization is enabled and Windows does recognizes it

Hi,
Well, I did this:

  1. Run http://localhost/, there are some kind of help page, not a docker dashboard

  2. Anyway I wrote to Terminal commands from this tutorial, and than command for setup the node, but it gives misteke as in text below:

C:\Users\User>docker run -d -p 80:80 docker/getting-started
Unable to find image ‘docker/getting-started:latest’ locally
latest: Pulling from docker/getting-started
c158987b0551: Pull complete
1e35f6679fab: Pull complete
cb9626c74200: Pull complete
b6334b6ace34: Pull complete
f1d1c9928c82: Pull complete
9b6f639ec6ea: Pull complete
ee68d3549ec8: Pull complete
33e0cbbb4673: Pull complete
4f7e34c2de10: Pull complete
Digest: sha256:d79336f4812b6547a53e735480dde67f8f8f7071b414fbd9297609ffb989abc1
Status: Downloaded newer image for docker/getting-started:latest
006ed1f338160c18b24f9fe066a66764b14cbe1cf7abdf3d2937c8364c228e7a

C:\Users\User>docker run -d -p 80:80 docker/getting-started
ad80bbd583ac05bd3207f62a37e2c1ad14a82c3cf819b5725502a402ac50e92e
docker: Error response from daemon: driver failed programming external connectivity on endpoint cocky_sinoussi (1fcbf355e712b0c18d5359b525cba46c3aae75222ecb77fc81d8d3685123db28): Bind for 0.0.0.0:80 failed: port is already allocated.

C:\Users\User>docker run --rm -e SETUP=“true” --mount type=bind,source=“<7437493@gmail.com:1TDTv7gu9JYke18DZVPqpHgER2Zs2zX6uUcq18mxz23uFtYjz7AczQdrHWXD74AYUpypQAGVhZyheeiFG9HMFbJLoisx6v>”,destination=/app/identity --mount type=bind,source=“<D:\Storj4.1>”,destination=/app/config --name storagenode storjlabs/storagenode:latest
docker: Error response from daemon: Mount denied:
The source path “<D:\Storj4.1>”
is not a valid Windows path.
See ‘docker run --help’.

That could be a problem?
Regards,
Alexander

You need to remove < and > from anywhere, they are part of placeholders, which you should replace with your actual values (you almost did).

Should be

--mount type=bind,source="c:\Users\aka985\AppData\Roaming\Storj\Identity\storagenode",destination=/app/identity --mount type=bind,source="D:\Storj4.1\",destination=/app/config

Hi, looks I need to generate identity first. Shall I do it under Windows or Docker? If I will have 2 nodes under docker, shall they have 2 different identities? If I need 2 under docker, there I can find instruction how to do it?

I fought a little bit. Probably I need to generate both identities under Windows, and than copy it to 2 different folders. Correct?

Is it so what I do I run identity creation, copy it to another folder and then just run identity creation again and copy it to another second folder?

Regards,
Alexander

They must have an unique identities, otherwise both will be disqualified pretty quick (because it will be the same identity but with missed data).
You can generate them on Windows, just use a different name, i.e.

identity create storagenode2

Then identity will be generated at %AppData%\Storj\Identity\storagenode2, so when you will sign it, you will need to use its name, i.e. storagenode2.
I would recommend to copy the identity to disk with its data to do not mix them by mistake and use this path to the identity in your docker run command.

Hi,
With identities it is clear now. Thanks

Now I am trying to start docker commands and get error:
(Docker is running, I can see it in tray, but if I try to go to http://localhost/, page is not awailable)

  1. I tryed to run it according to docker manual, but it gives this mistake:

C:\Windows\System32>docker run -d -p 80:80 docker/getting-started
6d65fce239ab68196a12d9907366cc5421f8f372993263b9094e7554443db497
docker: Error response from daemon: driver failed programming external connectivity on endpoint objective_cerf (8098027c382780b5f4f8c01360e9ab4c7560ed9ee7dfb734afcd5f9160ceab00): Error starting userland proxy: /forwards/expose/port returned unexpected status: 500.

Shall I do this step at all?

2.I tryed to run this command, but see this mistake:

C:\Windows\System32>docker run --rm -e SETUP=“true” --mount type=bind,source=“C:\Users\User\AppData\Roaming\Storj\Identity\storagenode”,destination=/app/identity --mount type=bind,source=“D:\Storj4.1”,destination=/app/config --name storagenode storjlabs/storagenode:latest
docker: Error response from daemon: Drive sharing failed for an unknown reason.
See ‘docker run --help’.


During command execution, system asks acces to drive C and I shared access

Probably something simple… Could you, please, help

Further steps - as I can see, Dashboard shall be installed. Will it be automatically installed during this


or I shall install it separatly as described here?

Regards,
Alexander

no, perhaps you already have this container running, thus port 80 already occupied. So likely you will need to stop and remove a previous version of the container before starting a new one.
You can see your containers with

docker ps -a

You need to confirm sharing of the drive D: in your system tray (it will require to provide your login and pass).

yes, you need either to confirm it, or copy your identity to the disk with data and use this path in your docker run command instead of "C:\Users\User\AppData\Roaming\Storj\Identity\storagenode" as I said before, this way you will only required to share the disk with data.

it’s part of the container, so when you setup your node and run, the web dashboard will be available on http://localhost:14002 by default. The CLI dashboard will be available too with the command

docker exec -it storagenode ./dashboard.sh

Yep. It asks password from windows account, but I didn’t set up it. Empty space is not allowed. Does it mean I shall set up system password anyway and enter it after each reboot of the system?
image

Or maybe I shall use some sign instead of empty password field?

Regards,
Alexander

Yes on both questions. The login problem you can solve by creating a scheduler job to start a docker desktop binary after reboot independently of login (it will ask for your login and password and will save them in this record). This method have a one negative effect though - you will not be able to use the docker desktop GUI anymore. So, if you would need it, you will be forced to stop the scheduler job first, then run the docker desktop GUI.
The other way (less secure) is to configure autologin.
But independently of chosen method you will need to have a password for your user, Windows will not allow to share a drive without it.

The other way would be to enable wsl2 and use the latest docker desktop with this engine, in this case your drives will be available to containers without drive sharing. It still will use a network stack to mount your drives, but it’s not SMB, thus you can use a login with an empty password.

Hi Alexey,
I gone forward with starting of the node with your support, thank you.

I have started the node by command:
docker run -d --restart unless-stopped --stop-timeout 300 -p 28967:28968/tcp -p 28967:28968/udp -p 127.0.0.1:14002:14002 -e WALLET=“0x8675290882f594227d9b69d1fc434bf54b2b5e6f” -e EMAIL="7437493@gmail.com" -e ADDRESS=“xx.xxx.xx.x:28968” -e STORAGE=“0.5TB” --mount type=bind,source=“D:\Identity\storagenode”,destination=/app/identity --mount type=bind,source=“D:\Storj4.1”,destination=/app/config --name storagenode storjlabs/storagenode:latest

And checked it by docker ps -a

This is second node in the network, so I have forwarded port like this:
image
image

Node server IP is same as in port forward settings:
image

Started localhost, but it seems not configured:

Questions:

  1. How to stop the node by command? What are those “name/id” in command docker stop name/id?
  2. Did I indicated right ports at docker run -d command?
  3. Did I forwarded ports correctly on the router? Or what can be a problem?
  4. Is it so, what I can set up second conteiner with second node in parralel with first before first run properly? Create new identity etc?
  5. Do I understand right, what if I have 2 nodes working via docker conteiners, I can later run third node just in Windows?

Regards,
Alexander

On your screenshot the node container is Exited (meaning - not working)

Please provide the last 20 lines from your logs

docker logs --tail 20 storagenode

Please post them here between two new lines with three backticks like this (you may mask your private information):

```
logs
lines
here
```

From this screenshot I can see that you forwarded 28968 to 28967

If you have another node on the same host with 28967 port, the second forward to the same port will not work, it can work only if you do not have any nodes on that host yet. So you need to forward 28968 to 28968 instead.

two ways:

  1. By name
docker stop objective_cerf
docker rm objective_cerf
  1. By ID (please copy the text of output instead of screenshot of output, it’s hard to copy pieces of the text output from the screenshot…):
docker stop 79741....
docker rm 79741....

No, you configured them wrong. In the docker run command the port mapping meaning -p <host_port>:<container_port>, so if you want to use the second port like 28968, it should be ... -p 28968:28967/tcp -p 28968:28967/udp -p 127.0.0.1:14003:14002 -e ADDRESS=xx.xxx.xx.x:28968 ...
please note that you also need to change the dashboard port, see in my example above.

Each node must have an own unique generated identity, otherwise if you use a copy even with a different authorization token it will be the same node but with missed storage and thus will be disqualified pretty quick.

Yes. But if you plan to do so, it’s better to change external ports for your docker nodes to do not use the default 28967 and 14002, to do not change them later either in your Windows GUI node or in one of the docker node to avoid conflicts.

Hi,

Couple questions more:

  1. If I generate 1st identity under Windowes, copied it to use in Docker node 1, I need to make second identity for Docker node 2. I tryed to generate second, but looks, 1st identity shall be removed first. Is it so? How to do it?

  2. Conteiner stop
    docker stop 79741…
    docker rm 79741…

Is it so, what number 79741 is a constant and ID I can take from somethere

docker stop 79741/id

Is this an ID?

If I use it, command doesn’t work
image

There to look for ID?

Regards,
Alexander

You have two options:

  1. Move the first identity to the disk with the first node’s data. Or copy, then remove the source folder
  2. Use a different name for each next node, i.e.
identity create storagenode2

it will create a folder with name storagenode2 and there would be identity files. Later you will use this name in the authorization command and use this path in your docker run command (but it’s better to copy the identity folder after authorization, storagenode2 in this case, to the data location for this node and use this new path instead).

no, this is a docker’s container ID, basically random sequence of numbers and letters, it will change every time. To avoid this problem you should use the option --name in your docker run command. So for the first node you may use the name storagenode, for the second - storagenode2 and so on. In this case you will invoke commands for the second node like this:

docker stop -t 300 storagenode2
docker rm storagenode2

for the node with name storagenode:

docker stop -t 300 storagenode
docker rm storagenode

Hi Alexey, thank you
Conteiner removed. Second identity generation started.

I have started new container with command, modifyed by your instruction:
docker run -d --restart unless-stopped --stop-timeout 300 -p 28968:28967/tcp -p 28968:28967/udp -p 127.0.0.1:14003:14002 -e WALLET=“0x8675290882f594227d9b69d1fc434bf54b2b5e6f” -e EMAIL="7437493@gmail.com" -e ADDRESS=“xx.xxx.xx.x:28968” -e STORAGE=“0.5TB” --mount type=bind,source=“D:\Identity\storagenode”,destination=/app/identity --mount type=bind,source=“D:\Storj4.1”,destination=/app/config --name storagenode storjlabs/storagenode:latest

Status of the conteiner:
C:\Users\User>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b8c36badf04 storjlabs/storagenode:latest “/entrypoint” About a minute ago Up About a minute 127.0.0.1:14003->14002/tcp, 0.0.0.0:28968->28967/tcp, 0.0.0.0:28968->28967/udp storagenode
6d65fce239ab docker/getting-started “/docker-entrypoint.…” 9 days ago Created objective_cerf
ad80bbd583ac docker/getting-started “/docker-entrypoint.…” 2 weeks ago Created cocky_sinoussi
006ed1f33816 docker/getting-started “/docker-entrypoint.…” 2 weeks ago Exited (255) 10 days ago 0.0.0.0:80->80/tcp upbeat_hopper

But dashboard report about misconfiguration:

20 lines of log:
C:\Users\User>docker logs --tail 20 storagenode
2023-02-02T08:01:18.290Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “12rfG3sh9NCWiX3ivPjq2HtdLmbqCrvHVEzJubnzFzosMuawymB”, “attempts”: 6, “error”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out”, “errorVerbose”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:145\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:01:49.225Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “1wFTAgs9DP5RSnCqKV1eLf6N9wtk4EAtmN5DpSxcs8EjT69tGE”, “attempts”: 7, “error”: “ping satellite: check-in ratelimit: node rate limited by id”, “errorVerbose”: “ping satellite: check-in ratelimit: node rate limited by id\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:139\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:01:50.442Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “12rfG3sh9NCWiX3ivPjq2HtdLmbqCrvHVEzJubnzFzosMuawymB”, “attempts”: 7, “error”: “ping satellite: check-in ratelimit: node rate limited by id”, “errorVerbose”: “ping satellite: check-in ratelimit: node rate limited by id\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:139\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:03:24.053Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “12L9ZFwhzVpuEKMUNUqkaTLGzwY9G24tbiigLiXpmZWKwmcNDDs”, “attempts”: 6, “error”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out”, “errorVerbose”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:145\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:03:30.691Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “12tRQrMTWUWwzwGh18i7Fqs67kmdhH9t6aToeiwbo5mfS2rUmo”, “attempts”: 6, “error”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out”, “errorVerbose”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:145\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:03:31.959Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “12EayRS2V1kEsWESU9QMRseFhdxYxKicsiFmxrsLZHeLUtdps3S”, “attempts”: 6, “error”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out”, “errorVerbose”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:145\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:03:32.916Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “121RTSDpyNZVcEU84Ticf2L1ntiuUimbWgfATz21tuvgk3vzoA6”, “attempts”: 6, “error”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out”, “errorVerbose”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:145\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:04:03.253Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “12tRQrMTWUWwzwGh18i7Fqs67kmdhH9t6aToeiwbo5mfS2rUmo”, “attempts”: 7, “error”: “ping satellite: check-in ratelimit: node rate limited by id”, “errorVerbose”: “ping satellite: check-in ratelimit: node rate limited by id\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:139\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:04:47.871Z INFO Downloading versions. {“Process”: “storagenode-updater”, “Server Address”: “https://version.storj.io”}
2023-02-02T08:04:48.546Z INFO Current binary version {“Process”: “storagenode-updater”, “Service”: “storagenode”, “Version”: “v1.71.2”}
2023-02-02T08:04:48.546Z INFO Version is up to date {“Process”: “storagenode-updater”, “Service”: “storagenode”}
2023-02-02T08:04:48.643Z INFO Current binary version {“Process”: “storagenode-updater”, “Service”: “storagenode-updater”, “Version”: “v1.71.2”}
2023-02-02T08:04:48.643Z INFO Version is up to date {“Process”: “storagenode-updater”, “Service”: “storagenode-updater”}
2023-02-02T08:05:03.573Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “12rfG3sh9NCWiX3ivPjq2HtdLmbqCrvHVEzJubnzFzosMuawymB”, “attempts”: 8, “error”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out”, “errorVerbose”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:145\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:05:05.402Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “1wFTAgs9DP5RSnCqKV1eLf6N9wtk4EAtmN5DpSxcs8EjT69tGE”, “attempts”: 8, “error”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out”, “errorVerbose”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:145\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:06:07.890Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “12L9ZFwhzVpuEKMUNUqkaTLGzwY9G24tbiigLiXpmZWKwmcNDDs”, “attempts”: 7, “error”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out”, “errorVerbose”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:145\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:06:13.701Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “12EayRS2V1kEsWESU9QMRseFhdxYxKicsiFmxrsLZHeLUtdps3S”, “attempts”: 7, “error”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out”, “errorVerbose”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:145\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:06:16.782Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “121RTSDpyNZVcEU84Ticf2L1ntiuUimbWgfATz21tuvgk3vzoA6”, “attempts”: 7, “error”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out”, “errorVerbose”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:145\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:07:11.707Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “12rfG3sh9NCWiX3ivPjq2HtdLmbqCrvHVEzJubnzFzosMuawymB”, “attempts”: 9, “error”: “ping satellite: check-in ratelimit: node rate limited by id”, “errorVerbose”: “ping satellite: check-in ratelimit: node rate limited by id\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:139\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}
2023-02-02T08:07:20.055Z ERROR contact:service ping satellite failed {“Process”: “storagenode”, “Satellite ID”: “12tRQrMTWUWwzwGh18i7Fqs67kmdhH9t6aToeiwbo5mfS2rUmo”, “attempts”: 8, “error”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out”, “errorVerbose”: “ping satellite: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: dial tcp xx.xxx.xx.x:28968: connect: connection timed out\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatelliteOnce:145\n\tstorj.io/storj/storagenode/contact.(*Service).pingSatellite:100\n\tstorj.io/storj/storagenode/contact.(*Chore).updateCycles.func1:87\n\tstorj.io/common/sync2.(*Cycle).Run:99\n\tstorj.io/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:75”}

Port forvarded like this:
image
image

Is it a problem with port forwarding or what?

Regards,
Alexander

This is mean that your external address and port is not available for the satellite.

Here you need either forward 28968 to 28968 for the second node or update your docker run command to use 28967 for listening and 28968 for the contact address, i.e.

-p 28967:28967/tcp -p 28967:28967/udp -e ADDRESS=xx.xxx.xx.x:28968

You have this choice because the second node on a different PC, if it would be on the same PC as a first one, then you should use a different external port everywhere, i.e. forward TCP+UDP 28968 to 28968 and have port mapping -p 28968:28967/tcp -p 28968:28967/udp -e ADDRESS=xx.xxx.xx.x:28968 in your docker run command.