Fast way to disconnect all connected peers

Is there one?
Because creating a script and disconnecting them one-by-one is quite slow.

I am not sure, but you could ideally start the daemon in offline mode (use the option: --offline)

From the docs:

  --offline bool   - Run offline. Do not connect to the rest of the network but provide local API.

@koalalorenzo my goal is to create a private ipfs network with no external peers, using docker.
if i use --offline=true param, is it possible to later set it to true without shutting down the daemon?
With ipfs shutdown the docker container shuts down too, so it wont help.

  1. You’ll need to specify your own bootstrap nodes (see the ipfs bootstrap commands). Otherwise, you’ll connect to the rest of the network automatically.
  2. You may want to turn off local discovery as well: https://github.com/ipfs/go-ipfs/blob/master/docs/config.md#discovery
  3. You should consider using private networks: https://github.com/ipfs/go-ipfs/blob/master/docs/experimental-features.md#private-networks

Thanks @stebalien for the info.
All these are very promising options but, since i am not very familiar with docker, i am having a hard time to apply them to my docker deployment.

For the “private network” feature to work, i need to put swarm.key into the ipfs directory. Is there a way for docker not to start the daemon automatically? So i will be able to plant the file into the container and then run the daemon manually.
Also i cannot stop the daemon without shutting down the container.
A daemon restart option would be awesome in this situation…

I believe the correct way to do this is to run:

docker run --entrypoint ipfs init

Then, you’d copy in your swarm key. Then, you’d start IPFS normally. However I’m not entirely sure if this’ll work.

@stebalien this produces “executable not found” error.
I managed to do it with: docker run -di --entrypoint "sh" --name "ipfs" ipfs/go-ipfs

But in docker-compose when i use “sh” as the entrypoint the container exits immediately.
Is it possible to prevent this, in order to docker exec everything i need?

Can you just get a shell using the -it flag?

1 Like

@koalalorenzo @stebalien I finally avoided docker services and used plain containers.
For anyone interested in setting up a private ipfs network, a way that works well and pretty fast on Docker is:

  1. docker run -dti --entrypoint "sh" --name "ipfsXX" ipfs/go-ipfs
  2. docker exec ipfsXX ipfs init
  3. docker exec ipfsXX ipfs bootstrap rm all
  4. docker exec -dti ipfsXX ipfs daemon

For debugging purposes you can have all configs and ids using:

  • docker exec ipfsXX cat /data/ipfs/config > configfileXX
  • docker exec ipfsXX ipfs id -f="<id>" > idfileXX

You can directly mount a repository volume, and there you can customise your config file. No need to keep running docker exec :smiley: I also strongly suggest to specify the docker tag, as the latest version is not always the stable one.

docker run -v  $PWD/ipfs:/data/ipfs -it ipfs/go-ipfs:v0.4.18

Then you can modify the file as you wish and restart the container when you want.
As an alternative you can just run a shell and run the commands from the container:

docker run -v $PWD/ipfs:/data/ipfs -it --entrypoint /bin/sh ipfs/go-ipfs:v0.4.18

Then you can run all the ipfs commands as you did, but without docker exec ... :smiley:

I hope it will help

Volumes work like a charm under Linux, but under Windows are pure hell. Lots of errors.
I do the above procedure only once (on deployment) using scripts, so it’s not a problem at all.
The good thing with this implementation is that local dockerized peers auto discover each other, so you have a private network up and running in no time. :tada:

PS: Docker has its own feature for configuration files, which works pretty well under Windows too:

Just like the zen of python say: Linux is better than windows.
Give up windows and use Linux or Mac, you will save much time.

1 Like

Yeah, I also tried in offline mode