OpenWrt Club OpenWrt Club
  • 首页
  • OpenWrt系统
  • OpenWrt插件
  • OpenWrt固件
  • 友人帐
  • OpneWrt 论坛
  • 注册
  • 登录
首页 › OpenWrt系统 › 如何在 OpenWrt 中安装Docker Compose

如何在 OpenWrt 中安装Docker Compose

萝卜
3年前OpenWrt系统阅读 11,092

文章前言

没有什么能够阻挡,你对自由的向往…..,前段时间Lean在固件中加入了luci-app-docker插件,让OpenWrt也能用上Docker,这简直是个天大的喜讯,所以这几天一直没闲着,一直想在OpenWrt的系统里安装一个Docker Compose来编排我的WEB环境,虽然说官方没有提供ARM版但是可以利用PIP来安装,这个在树莓派上一直使用。但是在OpenWrt系统上我估计没有人这样做,因为毕竟是个路由器系统,有些在路由器上的固件因为硬件的原因根本不需要也不太可能。

我首先尝试利用PIP来直接安装,不管是在x86_64还是树莓派ARM平台上都没有成功,利用官方的bin二进制文件安装也徒劳,所以只能靠自己,没想到这是一个大坑,我足足踩了三天,不过最终还是成功,这里就做一个笔记,也让有需要的朋友一起玩起来。

编译依赖

利用Python的pip安装Docker Compose 需要很多依赖,所以你在编译固件的时候需要选择一下内容

  • GCC
  • Make
  • python3
  • python3-dev
  • python3-pip
  • python3-six
  • python3-cffi
  • python3-openssl
  • python3-cryptography

其实Python3是可以在官方源中直接利用OPKG 来在线安装的,像GCC这些需要自己手动编译。

确认没有选中PyYAML,不然你可能遇到以下报错:

ERROR: Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

因为写这篇文章我是拿x86平台复现的,所以没有选择上PyYAML所以没有遇到,这里做个提示,如果你真的遇到了可以尝试一下方法来安装

pip3 install --ignore-installed PyYAML

如果还有其他的问题,你可以在本文下方留言。

第一种尝试

刷入系统后先更新一下pip版本,网络环境原因你可能需要开全局自然与科学:

pip3 install --upgrade pip

更新完成后安装Docker Compose

pip3 install docker-compose

第一次安装的时候bcrypt报错无法安装,报错如下:

build/temp.linux-x86_64-3.7/_bcrypt.c:22:24: fatal error: pyconfig.h: No such file or directory

这是我第一次尝试的时候没有编译python3-dev的缘故,如果你加入了其实还是报错,只能手动安装:

wget https://dl.openwrt.club/annex/compose/bcrypt-3.1.7.tar.gz
tar zxf bcrypt-3.1.7.tar.gz
cd bcrypt-3.1.7
python3 setup.py install

如果你看到以下内容说明安装成功:

Finished processing dependencies for bcrypt==3.1.7

继续安装:

pip3 install docker-compose

这次PyNaCl 安装报错,下载手动安装

wget https://dl.openwrt.club/annex/compose/PyNaCl-1.3.0.tar.gz
tar zxf PyNaCl-1.3.0.tar.gz
cd PyNaCl-1.3.0/
python3 setup.py install

但还是会报错:

checking for grep that handles long lines and -e... configure: error: no acceptable grep could be found in /usr/sbin:/usr/bin:/sbin:/bin:/usr/xpg4/bin
Traceback (most recent call last):
  File "setup.py", line 255, in <module>
    "Programming Language :: Python :: 3.7",
  File "/__init__.py", line 145, in setup
  File "/core.py", line 148, in setup
  File "/dist.py", line 966, in run_commands
  File "/dist.py", line 985, in run_command
  File "/install.py", line 67, in run
  File "/install.py", line 109, in do_egg_install
  File "/cmd.py", line 313, in run_command
  File "/dist.py", line 985, in run_command
  File "/bdist_egg.py", line 171, in run
  File "/cmd.py", line 313, in run_command
  File "/dist.py", line 985, in run_command
  File "setup.py", line 171, in run
    cwd=build_temp,
  File "/subprocess.py", line 363, in check_call
subprocess.CalledProcessError: Command '['/root/PyNaCl-1.3.0/src/libsodium/configure', '--disable-shared', '--enable-static', '--disable-debug', '--disable-dependency-tracking', '--with-pic', '--prefix', '/root/PyNaCl-1.3.0/build/temp.linux-x86_64-3.7']' returned non-zero exit status 1.

我把时间几乎都耗在了安装PyNaCl上,

第二种尝试

自己构建一个PyNaCl直接编译进固件。

cd openwrt/feeds/packages/lang/python/
mkdir pynacl
vim Makefile

把一下内容粘贴进去

#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=python-pynacl
PKG_VERSION:=1.3.0
PKG_RELEASE:=1

PKG_SOURCE:=PyNaCl-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/P/PyNaCl
PKG_HASH:=0c6100edd16fefd1557da078c7a31e7b7d7a52ce39fdca2bec29d4f7b6e7600c

PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-pynacl-$(PKG_VERSION)

PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE
PKG_MAINTAINER:=Bruce Thompson <[email protected]>, Alexandru Ardelean <[email protected]>

HOST_PYTHON_PACKAGE_BUILD_DEPENDS:="cffi>=1.4.1"
HOST_PYTHON3_PACKAGE_BUILD_DEPENDS:="cffi>=1.4.1"

include $(INCLUDE_DIR)/package.mk
include ../python-package.mk
include ../python3-package.mk

PYTHON_PKG_SETUP_VARS:= SODIUM_INSTALL=system
PYTHON3_PKG_SETUP_VARS:= SODIUM_INSTALL=system
RSTRIP:=:
#TARGET_CFLAGS:=
#TARGET_LDFLAGS:=

PKG_UNPACK:=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE)

define Package/python-pynacl/Default
  SECTION:=lang
  CATEGORY:=Languages
  SUBMENU:=Python
  TITLE:=Networking and Cryptography (NaCl) library
  URL:=https://pynacl.readthedocs.io/en/stable/
  DEPENDS+=libsodium @!LIBSODIUM_MINIMAL
endef

define Package/python-pynacl
$(call Package/python-pynacl/Default)
  DEPENDS+= \
      +PACKAGE_python-pynacl:python-light \
      +PACKAGE_python-pynacl:python-cffi \
      +PACKAGE_python-pynacl:python-six
  VARIANT:=python
endef

define Package/python3-pynacl
$(call Package/python-pynacl/Default)
  DEPENDS+= \
      +PACKAGE_python3-pynacl:python3-light \
      +PACKAGE_python3-pynacl:python3-cffi \
      +PACKAGE_python3-pynacl:python3-six
  VARIANT:=python3
endef

define Package/python-pynacl/description
Python binding to the Networking and Cryptography (NaCl) library
endef

define Package/python3-pynacl/description
$(call Package/python-pynacl/description)
.
(Variant for Python3)
endef

$(eval $(call PyPackage,python-pynacl))
$(eval $(call BuildPackage,python-pynacl))
$(eval $(call BuildPackage,python-pynacl-src))

$(eval $(call Py3Package,python3-pynacl))
$(eval $(call BuildPackage,python3-pynacl))
$(eval $(call BuildPackage,python3-pynacl-src))

更新一下feeds的packages:

./scripts/feeds update -a
./scripts/feeds install -a

运行make menuconfig进入配置界面,选择Languages--->Python--->python3-pynacl-src,保存后退出后编译刷入。

别抱太大希望依然是报错,但是这次cryptography竟然也报错,我都编译进去了还是报错,所以手动下载安装,只要报错的手动下载。

wget https://dl.openwrt.club/annex/compose/cryptography-2.8.tar.gz
tar zxf cryptography-2.8.tar.gz
cd cryptography-2.8
python3 setup.py install

最终解决办法

反反复复无法解决这个问题,但好在搜索错误答案的时候找到一篇Home Assistant的文章也是需要用到PyNaCl,跟着脚本做了一遍竟然顺利完成安装。

新建目录:

mkdir -p /usr/include/ffi

下载文件:

需要的文件
下载后上传到路由器解压

下载后将文件上传到OpenWrt设备上并解压

tar zxf openwrt-compose.tar.gz

拷贝文件到指定目录

cp ./openwrt-compose/ffi* /usr/include/ffi/

查看libffi.so文件是否存在

[email protected]:~# ls /usr/lib/libffi.so*
/usr/lib/libffi.so.6      /usr/lib/libffi.so.6.0.4

建立软连接

ln -s /usr/lib/libffi.so.6.0.4 /usr/lib/libffi.so

查看libcrypto文件是否存在和版本信息

[email protected]:~# ls /usr/lib/libcrypto*
/usr/lib/libcrypto.so.1.1

建立软连接:

ln -s /usr/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so

查看libssl.so文件是否存在和版本信息

[email protected]:~# ls /usr/lib/libssl.so*
/usr/lib/libssl.so.1.1

建立软连接:

ln -s /usr/lib/libssl.so.1.1 /usr/lib/libssl.so

安装 libsodium

opkg install libsodium

系统默认是有安装的,运行上面的可以更新到最新版本

cp ./openwrt-compose/sodium.h /usr/include/python3.7/
cp -r ./openwrt-compose/sodium /usr/include/python3.7/

建立软连接:

ln -s /usr/lib/libsodium.so.23.3.0 /usr/lib/libsodium.so

尝试安装PyNaCl,在终端执行以下命令:

SODIUM_INSTALL=system pip3 install pynacl

安装成功:

[email protected]:~# SODIUM_INSTALL=system pip3 install pynacl
Collecting pynacl
  Using cached https://files.pythonhosted.org/packages/61/ab/2ac6dea8489fa713e2b4c6c5b549cc962dd4a842b5998d9e80cf8440b7cd/PyNaCl-1.3.0.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Requirement already satisfied: cffi>=1.4.1 in /usr/lib/python3.7/site-packages (from pynacl) (1.13.0)
Requirement already satisfied: six in /usr/lib/python3.7/site-packages (from pynacl) (1.12.0)
Requirement already satisfied: pycparser in /usr/lib/python3.7/site-packages (from cffi>=1.4.1->pynacl) (2.19)
Building wheels for collected packages: pynacl
  Building wheel for pynacl (PEP 517) ... done
  Created wheel for pynacl: filename=PyNaCl-1.3.0-cp37-cp37-linux_x86_64.whl size=87953 sha256=865c140e103a28b17580062b724bb4799bee1458237f3ba61fbe446499abf303
  Stored in directory: /tmp/.cache/wheels/c1/10/e7/66597ff71adf8cb7403527243c4b57c66a0d1dfdd8adf2eae4
Successfully built pynacl
Installing collected packages: pynacl
Successfully installed pynacl-1.3.0

安装Compose

pip3 install docker-compose

看到以下信息说明安装成功

Installing collected packages: certifi, urllib3, idna, chardet, requests, texttable, jsonschema, websocket-client, docopt, docker-pycreds, paramiko, docker, dockerpty, cached-property, PyYAML, docker-compose
    Running setup.py install for texttable ... done
    Running setup.py install for docopt ... done
    Running setup.py install for dockerpty ... done
    Running setup.py install for PyYAML ... done
Successfully installed PyYAML-3.13 cached-property-1.5.1 certifi-2019.9.11 chardet-3.0.4 docker-3.7.3 docker-compose-1.24.1 docker-pycreds-0.4.0 dockerpty-0.4.1 docopt-0.6.2 idna-2.7 jsonschema-2.6.0 paramiko-2.6.0 requests-2.20.1 texttable-0.9.1 urllib3-1.24.3 websocket-client-0.56.0

测试docker-compose 是否能运行

[email protected]:~# docker-compose --version
docker-compose version 1.24.1, build 4667896

成功的在OpenWrt上安装了docker-compose 1.24.1的版本,接下来就交给你发挥了。

我这次复现是在x86_64平台上完成的,因为之前为了刷机方便我在树莓派上折腾,期间还尝试了很多很多错误的方法但是没有记录下来。再是笔记的原因这篇文章我罗啰索索的记录了整个过程,目前我的树莓派和一个软路由都成功的安装docker-compose,接下来我可能还会记录一下如何在OpenWrt上使用docker-compse 搭建网站开发环境。

Compose Docker OpenWrt
赞(15) 收藏(0)
Docker上运行Lean大源码编译的OpenWRT(初稿)
上一篇
OpenWrt 利用docker-compose 搭建网站环境
下一篇
再想想
所有评论(106)
  • raiuka

    想放弃compose了。。。麻烦啊

    3年前 回复
    • Luobo

      @raiuka: 其实不麻烦,主要是依赖麻烦。你需要找我我发给你gcc啥的那些依赖不就行了。

      3年前 回复
    • pastime

      @raiuka: 想折腾一下

      2年前 回复
  • wenchangshou

    测试一下

    3年前 回复
  • 123

    测试一下

    3年前 回复
  • ywb

    这个试一下吧,

    3年前 回复
  • 1579591957603

    太难了,试试这个看

    3年前 回复
  • 呵呵哒

    太棒了,试一试

    3年前 回复
  • hanicc

    emmm…终于有大佬踩坑出来了

    3年前 回复
    • hanicc

      @hanicc: [email protected]:~# SODIUM_INSTALL=system pip3 install pynacl
      Collecting pynacl
      Using cached PyNaCl-1.3.0.tar.gz (3.4 MB)
      Installing build dependencies … error
      ERROR: Command errored out with exit status 1: /usr/bin/python3 /usr/lib/python3.7/site-packages/pip install –ignore-installed –no-user –prefix /tmp/pip-build-env-tas6d6j5/overlay –no-warn-script-location -v –no-binary :none: –only-binary :none: -i https://pypi.org/simple — setuptools wheel ‘cffi>=1.4.1; python_implementation != ‘”‘”‘PyPy'”‘”” Check the logs for full command output.

      报错这个,请问有解吗?

      3年前 回复
    • hanicc

      @hanicc: 已经试过这个 pip3 install -U setuptools 还是一样@[email protected]

      3年前 回复
    • 萝卜

      @hanicc: 这个确实很难搞,特别是pynacl,你自己多试试,有时候网络也是个问题。

      3年前 回复
  • Yuki

    不会吧还要编译?

    3年前 回复
  • 1583196855325

    测试一下,谢谢

    3年前 回复
  • leo

    有点蛮烦的折腾

    3年前 回复
  • kris

    請問是否把該編譯的編譯進去後, 就可以直接進行最後成功的做法?

    3年前 回复
    • kris

      @kris: 成功了, 感謝你的分享^^

      3年前 回复
  • 度

    试试 看看能不能用

    3年前 回复
  • cwzsquare

    测试

    3年前 回复
  • eian

    測試一下

    3年前 回复
  • 1588084831153

    测试一下

    3年前 回复
    • 666

      @1588084831153: 測試一下

      3年前 回复
  • 666

    pip3 install docker-compose==1.23.2
    这样可以直接装

    3年前 回复
    • 萝卜

      @666: 可以直接这么来?

      3年前 回复
  • 打醬油

    測試一下

    3年前 回复
  • JungleYang

    emmm…终于有大佬踩坑出来了

    3年前 回复
  • rule

    测试一下

    3年前 回复
  • pikaqiu

    测试一下

    3年前 回复
  • JungleYang

    我评论了啊我评论了啊

    3年前 回复
  • pikaqiu

    感谢楼主

    3年前 回复
  • hua222

    测试一下

    3年前 回复
  • 测试一下

    测试一下

    3年前 回复
  • 我评论了的

    我评论了的

    3年前 回复
  • rex

    看看試試看

    3年前 回复
  • digger

    测试一下

    3年前 回复
  • JungleYang

    想放弃compose了。。。麻烦啊

    3年前 回复
  • miky

    感謝

    3年前 回复
  • lok

    测试一下

    3年前 回复
  • lok

    看看試試看

    3年前 回复
  • 123

    测试一下a

    3年前 回复
  • 123

    测试一下啊啊啊

    3年前 回复
  • 123

    评论了为啥不能下载啊

    3年前 回复
  • ram

    先试一试

    3年前 回复
  • Aex

    大佬,请收下我的膝盖!!

    3年前 回复
  • yy

    试试

    3年前 回复
  • 从v的

    看看咯

    2年前 回复
  • 非攻非白

    [email protected]:~# cp ./openwrt-compose/sodium.h /usr/include/python3.8/
    cp: can’t stat ‘./openwrt-compose/sodium.h’: No such file or directory
    出现这种错误怎么解决啊?

    2年前 回复
  • 非攻非白

    各种出错啊,不知道怎么解决

    2年前 回复
  • foo

    测试 一下

    2年前 回复
  • foo

    想下载文件

    2年前 回复
  • 161180102062

    再回复一次,看看能否下载文件

    2年前 回复
  • 1612094995646

    测试一下

    2年前 回复
  • 阿洋

    测试一下

    2年前 回复
  • fanluo

    测试下

    2年前 回复
  • 1612512233685

    想放弃compose了。。。麻烦啊

    2年前 回复
  • 111

    试试

    2年前 回复
  • 匿名

    测试一下,谢谢

    2年前 回复
  • popo

    感谢分享

    2年前 回复
  • frankevil

    测试一下

    2年前 回复
  • 1613999638671

    测试一下

    2年前 回复
  • young

    还真有一模一样的问题。。。

    2年前 回复
  • 十三

    测试一下

    2年前 回复
  • 十三

    想下载看看 学习一下

    2年前 回复
  • l

    暂且一试

    2年前 回复
  • ak

    可以分享一下依赖吗

    2年前 回复
  • a

    测试一下

    2年前 回复
  • 啊啊啊

    OK看

    2年前 回复
  • 161725472087

    谢谢楼主的分享!

    2年前 回复
  • 161762137891

    麻烦

    2年前 回复
  • vick

    试一下。。

    2年前 回复
  • 16177199401000

    感谢,尝试一下~

    2年前 回复
  • 你再想想

    麻烦

    2年前 回复
  • codedreamfy

    安装不上pynacl的,建议直接 pip install docker-compose==1.23.2,立马见效,什么gcc什么make都无需要,直接成功!

    2年前 回复
  • JIM

    想放弃它了,好难安装呀

    2年前 回复
  • qingmo

    来用一下大佬的配置

    2年前 回复
  • hh

    测试测试

    2年前 回复
  • hh

    怎么下载文件啊?

    2年前 回复
  • 是的撒大苏打

    启动提示sha啥报错

    2年前 回复
  • 1619661200523

    回复咋不能下载文件

    2年前 回复
  • 奥术大师大V几份保险

    下载试试,谢谢

    2年前 回复
  • sunmukong

    试一下啊

    2年前 回复
  • 162283376428

    测试能不能安装

    2年前 回复
  • 不杨

    不错,正需要,感谢提供思路

    2年前 回复
  • 1623293055420

    终于找到方法了,学习一下

    2年前 回复
  • lucas

    测试下能不能安装,感谢你的教程

    2年前 回复
  • afrojewelz

    我也想有docker-compose 试试看

    2年前 回复
    • afrojewelz

      @afrojewelz: openwrt-compose.tar.gz 下载地址哪?

      2年前 回复
  • J

    看看怎么样

    2年前 回复
  • 1624472630542

    测试一下

    2年前 回复
  • Shawn

    行不行啊

    2年前 回复
  • 1625882982804

    感谢分享!试试能不能安装。

    2年前 回复
  • 1629203819702

    试一下

    2年前 回复
  • 1631415596575

    尝试一下

    2年前 回复
  • 1631601788697

    折腾好久了,不知道行不行

    2年前 回复
  • 16338463258

    试一试

    1年前 回复
  • P3ter

    测试一下 手上设备不多了

    9月前 回复
  • xcc

    试下看看

    8月前 回复
  • xx

    好

    8月前 回复
  • 1673951781917

    测试看看

    2月前 回复
  • 1673951781917

    测试下能不能安装,感谢你的教程

    2月前 回复
  • 1674239311215

    先下载文件。无论成功与否,感谢分享一生平安

    2月前 回复
  • 颓废的兔子

    其实只需要一行命令就够了opkg install docker-compose

    2月前 回复
  • 1675349586837

    试试看能不能

    2月前 回复
  • 1677480379799

    感谢

    4周前 回复
  • 1677480379799

    谢谢大佬分享

    4周前 回复
  • jacob

    测试下

    3周前 回复
聚合文章
OpenWrt 使用 Luci-app-frpc 配合Docker 内网穿透
OpenWrt 利用Docker 搭建Cloud Torrent 下载BT/PT种子
Ubuntu 18.04 编译OpenWRT遇到libwebsockets 重复问题
Ubuntu 18.04 编译OpenWRT遇到错误和解决办法
云标签
Adguard BT下载 Compose Docker LEDE OpenSSL OpenWrt OpenWrt功能 PassWall PT下载 Torrent Ubuntu 个性修改 内网穿透 固件编译 服务器 树莓派 端口映射 网站环境
OpenWrt 使用 Luci-app-frpc 配合Docker 内网穿透
3年前
5,659 1 1
OpenWrt 利用Docker 搭建Cloud Torrent 下载BT/PT种子
3年前
3,123 0 5
Ubuntu 18.04 编译OpenWRT遇到libwebsockets 重复问题
3年前
2,420 0 0
Ubuntu 18.04 编译OpenWRT遇到错误和解决办法
3年前
4,015 0 2
106 15
  • 15
  • 106
Copyright © 2019-2023 OpenWrt Club. Designed by nicetheme.
  • 首页
  • OpenWrt系统
  • OpenWrt插件
  • OpenWrt固件
  • 友人帐
  • OpneWrt 论坛
萝卜
茕茕孑立,孑孓而行。
13
文章
36
评论
104
喜欢