Search code examples
dockerportingtizen

Issue: Porting Docker to a new platform (Tizen 4.0 + ARM64)


I have been trying to port Docker CE on a new platform (Tizen 4.0 + ARM64) using static binaries as described here

However, even though I meet all the pre-requisites described in above link, I keep getting this error while trying to run docker daemon :

WARN[2018-10-04T14:14:57.890120101+09:00] Running modprobe bridge br_netfilter failed with message: modprobe: WARNING: Module bridge not found in directory /lib/modules/4.9.59-g70b545c-dirty modprobe: WARNING: Module br_netfilter not found in directory /lib/modules/4.9.59-g70b545c-dirty, error: exit status 1

WARN[2018-10-04T14:14:57.905153370+09:00] Running modprobe nf_nat failed with message: modprobe: WARNING: Module nf_nat not found in directory /lib/modules/4.9.59-g70b545c-dirty, error: exit status 1

WARN[2018-10-04T14:14:57.920222485+09:00] Running modprobe xt_conntrack failed with message: modprobe: WARNING: Module xt_conntrack not found in directory /lib/modules/4.9.59-g70b545c-dirty, error: exit status 1

Error starting daemon: Error initializing network controller: Error creating default "bridge" network: package not installed

Is there anyway to fix this?

Otherwise, Is there some alternative way to port docker onto a new platform (In this case: Tizen 4.0 + ARM64).
Key note: The platform uses a linux kernel but doesn't support many typical Linux Platform features like apt-get commands.

Any help would be greatly appreciated. Thanks in advance :)


Solution

  • Docker, by itself, requires a lot of pre-requesites to run on a new platform. Some of them are mentioned here.

    Apart from meeting the pre-requisites, one has to meet specific kernel requirements and in case, the kernel doesn't meet all those requirements, one has to patch the kernel accordingly to get the things running.

    Here are the kernel defconfigs, one must enable to get docker running -

    CONFIG_CGROUP_DEVICE=y, CONFIG_CPUSETS=y, CONFIG_BLK_CGROUP=y, CONFIG_CGROUPS=y, CONFIG_CGROUP_CPUACCT=y, CONFIG_CGROUP_DEVICE=y, CONFIG_CGROUP_FREEZER=y, CONFIG_CGROUP_SCHED=y, - CONFIG_CGROUP_PERF=y, CONFIG_CGROUP_HUGETLB=y, CONFIG_NET_CLS_CGROUP=y, CONFIG_CGROUP_NET_PRIO=y, CONFIG_CFS_BANDWIDTH=y, CONFIG_CGROUP_PIDS=y, CONFIG_BLK_CGROUP=y, CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y, CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y, CONFIG_NETFILTER_XT_MATCH_IPVS=y, CONFIG_NF_NAT_IPV4=y, CONFIG_IP_NF_FILTER=y, CONFIG_IP_NF_TARGET_MASQUERADE=y, CONFIG_IP_NF_NAT=y, CONFIG_NF_NAT=y, CONFIG_NF_NAT_NEEDED=y, CONFIG_POSIX_MQUEUE=y, CONFIG_MEMCG=y, CONFIG_MEMCG_SWAP=y, CONFIG_MEMCG_KMEM=y, CONFIG_MEMCG_SWAP_ENABLED=y, CONFIG_BRIDGE=y, CONFIG_BRIDGE_NETFILTER=y, CONFIG_VXLAN=y, CONFIG_CRYPTO=y, CONFIG_CRYPTO_AEAD=y, CONFIG_CRYPTO_GCM=y, CONFIG_CRYPTO_SEQIV=y, CONFIG_CRYPTO_GHASH=y, CONFIG_XFRM=y, CONFIG_XFRM_USER=y, CONFIG_XFRM_ALGO=y, CONFIG_INET_ESP=y, CONFIG_INET_XFRM_MODE_TRANSPORT=y, CONFIG_IPVLAN=y, CONFIG_MACVLAN=y, CONFIG_DUMMY=y, ": CONFIG_NF_NAT_FTP=y, CONFIG_NF_CONNTRACK_FTP=y, CONFIG_NF_NAT_TFTP=y, CONFIG_NF_CONNTRACK_TFTP=y, CONFIG_OVERLAY_FS=y, CONG_AUFS_FS=y, CONFIG_BTRFS_FS=y, CONFIG_BTRFS_FS_POSIX_ACL=y, CONFIG_BLK_DEV_DM=y, CONFIG_DM_THIN_PROVISIONING=y, CONFIG_NAMESPACES=y, CONFIG_NET_NS=y, CONFIG_PID_NS=y, CONFIG_IPC_NS=y, CONFIG_UTS_NS=y, CONFIG_KEYS=y, CONFIG_VETH=y, CONFIG_USER_NS=y, CONFIG_SECCOMP=y, CONFIG_BLK_DEV_THROTTLING=y, CONFIG_IOSCHED_CFQ=y, CONFIG_CFQ_GROUP_IOSCHED=y, CONFIG_FAIR_GROUP_SCHED=y, CONFIG_RT_GROUP_SCHED=y, CONFIG_IP_VS=y, CONFIG_IP_VS_NFCT=y, CONFIG_IP_VS_RR=y, CONFIG_EXT4_FS=y, CONFIG_EXT4_FS_POSIX_ACL=y, CONFIG_EXT4_FS_SECURITY=y

    P.S. - Some of the above defconfigs may not be necessary to get the docker running. However, enabling all of them ensures you have extended support for all the features that docker offers.