专栏首页hotqin888的专栏Windows里golang交叉编译Linux文件在docker里的centos中运行

Windows里golang交叉编译Linux文件在docker里的centos中运行

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/details/79588773

1.Windows里golang交叉编译问题

现在go 的跨平台编译比较简单了,

set GOARCH=amd64

set GOOS=linux

然后就可以了, go build出来的就是linux 64 位的可执行程序了

https://www.cnblogs.com/lifeil/p/5408334.html

此时编译出来的可执行文件不带exe扩展名。对于Linux系统是没所谓的。

如果用LiteIDE编辑,选择cross-linux64

# cross-compiler linux amd64
GOROOT=d:\go
#GOBIN=
GOARCH=amd64
GOOS=linux
CGO_ENABLED=0
PATH=D:\TDM-GCC-64\bin;%GOROOT%\bin;%PATH%
LITEIDE_GDB=gdb
LITEIDE_MAKE=mingw32-make
LITEIDE_TERM=%COMSPEC%
LITEIDE_TERMARGS=
LITEIDE_EXEC=%COMSPEC%
LITEIDE_EXECOPT=/C

如果提示go install: cannotinstall cross-compiled binaries when GOBIN is set

就把GOBIN环境变量设置删除,然后重启LiteIDE(或重启机器?)就可以了。此时编译出来的可执行文件带exe扩展名。对于Linux系统是没所谓的。

2.Windows中安装docker,搭建centos

参考http://blog.csdn.net/qq_32969313/article/details/64919735

http://blog.csdn.net/mexel310/article/details/51705777

……

……

UsePrivilegeSeparation sandbox 改为 UsePrivilegeSeparation no  可以用vi改,也可以用下面命令

[root@b3426410ff43 /]# sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparationno/g" /etc/ssh/sshd_config

[root@b3426410ff43 /]# sed -i "s/UsePAM.*/UsePAM no/g"/etc/ssh/sshd_config

修改完后,重新启动sshd

# /usr/sbin/sshd -D

[root@b1b202cf887c /]# passwd

Changing password for user root.

New password:

BAD PASSWORD: The password fails the dictionary check - it is based on adictionary word

密码必须是数字+字母+符号,位数大于8个

New password:

Retype new password:

passwd: all authentication tokens updated successfully.

[root@b1b202cf887c /]#  /usr/sbin/sshd-D

WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and maycause several problems.

[root@b3426410ff43 /]# /usr/sbin/sshd -D

然后修改root密码

passwd root

或者直接一句修改

echo “123456qxc$&″ | passwd --stdin root密码必须是字母+数字+符号,位数大于8位

接着需要把修改后的镜像保存了,首先输入exit退出容器,再使用下面命令查看刚运行过的,

docker commit将修改后镜像保存到本地,参数是ID,名字

#docker ps -all

CONTAINER ID IMAGE    COMMAND    CREATED       STATUS          PORTS   NAMES

b3426410ff43 centos:7  "/bin/bash"4 minutes ago    Exited (0) 4 secondsago      centos7ssh

#docker commit b5926410fe60 myimage/centos7-ssh

下次可以输入刚保存的名字启动修改过安装了ssh服务的镜像了。

……

……

接下来只要启动就可以了

yuminstall -y openssh-server

#使用ssh-keygen命令来手动生成

ssh-keygen-q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''

ssh-keygen-q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''

ssh-keygen-t dsa -f /etc/ssh/ssh_host_ed25519_key  -N ''

sed -i"s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g"/etc/ssh/sshd_config

sed -i"s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config

启动ssh

/usr/sbin/sshd -D  

接下来就是常用的命令了,将端口映射到宿主机,我这里就是VM分配的linux系统。

#退出,但不停止容器

Ctrl+P+Q

#回到Docker下面,停止容器

docker stop <容器ID>

#提交当前容器到镜像

docker commit <容器ID> <NAME/VERSION>

#启动新容器,并且进行端口映射

docker run -itd -p 50001:22 <刚才提交的镜像ID> /bin/bash 进入容器后再运行ssh

好了,这样我们在windows下利用ssh工具访问宿主机的IP端口就可以访问到容器了

我这里就是192.168.99.100:50001

$ docker images

REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE

centos                      v4                  65a70b3c749f        8 hours ago         544MB

centos                      v3                  70f73f55aa5f        11 hours ago        386MB

centos                      v2                  5b324eb3a8c4        11 hours ago        302MB

centos                      latest              2d194b392dd1        10 days ago         195MB

Administrator@604TFALNDKDKJWCMINGW64 ~

$ docker run -itd -p 50001:22 65a/bin/bash

e044792450751d0ad3b93fac91d44c5fc03c59fc3e6c91baeda9845f50dd47d2

Administrator@604TFALNDKDKJWCMINGW64 ~

$ docker attach e04

[root@e04479245075 /]#/usr/sbin/sshd -D这里启动ssh后有提示,没关系

WARNING:'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause severalproblems.

3.用SecureCRTSecureFX_HH_x64登录centos

连接命令行用SecureCRT:

用户名是root,密码是刚才修改的 字母+数字+符号。

上传文件用SecureFX:

当前目录是root下。

4.在centos中执行文件

把应用上传到centos系统的root文件夹下

再回到SecureCRT

输入ls -l列出当前目录下的文件。其中ls是list,也就是列出的意思,-l参数是long的意思,也就是列出文件详细信息,每行第一个字符带x的就是有可执行权限的文件,多半就是可执行程序。

使用./filename来执行, 如果输入./filename不能执行, 使用chmod+x filename来尝试给它执行的权限

[root@e04479245075 ~]# ./engineercms.exe

-bash: ./engineercms.exe: Permission denied

[root@e04479245075 ~]# chmod +x engineercms.exe

[root@e04479245075 ~]# ./engineercms.exe

[ORM]2018/03/16 23:48:38 register db `default`, sql: unknowndriver "sqlite3" (forgotten import?)

must have one register DataBase alias named `default`

无法执行是因为应用中引用了基于cgo的sqlite3,而cgo不能跨平台,最好是在Linux系统中搭建环境进行编译。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在 Windows 上 使用 ONLYOFFICE 协作编辑文档

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

    hotqin888
  • gorm多条数据级联查询关联查询gorm连接池gorm事务

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    hotqin888
  • golang

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

    hotqin888
  • Xshell如何连接Docker容器 顶

    wuweixiang
  • sshd服务搭建与管理

    SSH(Secure Shell)建立在应用层和传输层基础上的安全协议。它使用加密验证来确认用户身份,并对两台主机之间的所有通信加密。

    用户1679793
  • Oracle数据库的安装与配置

    本文编辑 : 严小样儿 编程工具 : Oracle、Linux、Xstart、CRT或Xshell 阅读时长 : 15分钟

    DataScience
  • 大数据Hadoop快速入门教程

    1、Hadoop生态概况 Hadoop是一个由Apache基金会所开发的分布式系统集成架构,用户可以在不了解分布式底层细节情况下,开发分布式程序,充分利用集群的...

    CSDN技术头条
  • 【剑指Offer】二叉树的镜像

    输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]

    小新哟
  • Docker容器学习梳理--SSH方式登陆容器

    前面几篇已经介绍了Docker基础环境的部署,下面介绍下通过ssh方式登陆Docker容器的操作记录(其实不太建议直接用ssh去连接上容器的想法,虽然可以,但是...

    洗尽了浮华
  • NFS服务器

    NFS,是Network File System的简写,即网络文件系统。网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统...

    胡齐

扫码关注云+社区

领取腾讯云代金券