Skip to main content

DNS problems when running an Ethereum cluster on Docker Swarm

To run privately an ethereum cluster, the nodes have to find each other through a bootnode. The address of the bootnode has to be an IP address. When we run a bridged network we can set manually the ip address, but this option is not currently supported by the overlay network needed by swarm.

Therefore in our init script we run a simple resolution command based on the image name "bootnode". Problem was that the nodes were still unable to connect and no mining would happen.
After investigating, I've noticed that the address resolved with the name of the service was not consistent. Inside the docker container:

root@84cba6d65c3d:/geth# host ethnode4
ethnode4 has address 10.0.0.3
root@84cba6d65c3d:/geth# host tasks.ethnode4
tasks.ethnode4 has address 10.0.0.4


The right address was .4 where the system was answering , with .3 other containers were not able to connect.  Therefore I change the bash script to fetch the bootnode ip by prepending the hostname with "tasks." like doing "host tasks.bootnode" instead of "host.bootnode" (you could use whatever command you like):

BOOTNODEIPADDRESS=$(host tasks.$3 | head -1|cut -d' ' -f4)

After this, the ethereum cluster started correctly


Comments

Popular posts from this blog

Building bitcoin/litecoin on mac os x missing EC.h

For my own fun, I was playing around with bitcoin, to check how the parameters of the cryptocurrencies can be modified.

After recent upgrades to my OS, I could not build any longer the bitcoind. Seems like something changed on that side. Now this command

./configure --with-gui=qt5 --enable-debug
Was sistematically producing 
configure: error: OpenSSL ec header missing

EC is the file for elliptic curve cryptography. I had brew correctly configured, and the header files were all correctly present. After some time spent inspecting the issue, on github I was able to find the solution for this problem. I simply add to export the following
export LDFLAGS=-L/usr/local/opt/openssl/libexport CPPFLAGS=-I/usr/local/opt/openssl/include
There is aksi pull request on bitcoin for that, I hope I could save you some time https://github.com/bitcoin/bitcoin/pull/6885/files?diff=split&unchanged=expanded

Hybris setup issue: Unsupported major.minor version 52.0

While I was typing the final "ant all" command for hybris, it miserably failed with the following exception

hybris/bin/platform/resources/ant/antmacros.xml:123: java.lang.UnsupportedClassVersionError: de/hybris/ant/taskdefs/DbDriverValidator : Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method)


Even though a "java -version" gave me back version 8, ant is still using $JAVA_HOME variable.
So you have to change it into the script. My suggestion is that you adapt the setantenv.bat script with the JAVA_HOME directly


@echo off
set ANT_OPTS=-Xmx512m -Dfile.encoding=UTF-8
set ANT_HOME=%~dp0apache-ant-1.9.1
set JAVA_HOME=C:/Program Files/Java/jdk1.8.0_101
set PATH=%ANT_HOME%\bin;%PATH%
rem deleting CLASSPATH as a workaround for PLA-8702
set CLASSPATH=
echo Setting ant home to: %ANT_HOME%
ant -version

How I ran Gradle with cntlm

I was behind a corporate firewall and had to run gradlew (gradle) from Cygwin. The system was running a cntlm authentication proxy.

I ran the following command

export http_proxy=http://127.0.0.1:3128/
export https_proxy=$http_proxy

Then I ran

./gradlew -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3128 -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128

I hope it helps