首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Windows里golang交叉编译Linux文件在docker里的centos中运行

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

作者头像
hotqin888
发布于 2018-09-11 07:21:36
发布于 2018-09-11 07:21:36
3.4K00
代码可运行
举报
文章被收录于专栏:hotqin888的专栏hotqin888的专栏
运行总次数:0
代码可运行

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1334555

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# cross-compiler linux amd64
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GOROOT=d:\go
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#GOBIN=
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GOARCH=amd64
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GOOS=linux
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CGO_ENABLED=0
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PATH=D:\TDM-GCC-64\bin;%GOROOT%\bin;%PATH%
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LITEIDE_GDB=gdb
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LITEIDE_MAKE=mingw32-make
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LITEIDE_TERM=%COMSPEC%
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LITEIDE_TERMARGS=
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LITEIDE_EXEC=%COMSPEC%
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

ORM2018/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系统中搭建环境进行编译。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年03月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
没有集群照样学Ansible:托管的容器环境(实用)
Ansible[1]是一个自动化运维框架,由Python语言开发,通过ssh实现无Agent对服务器进行一些列的自动化管理,比如进行软件安装、配置文件更新、文件分发等操作。这些功能的实现实际上是通过Ansible的诸多模块实现的,通过与模块之间的交互通信,实现这些功能。今天我们首先准备一下Ansible的实验环境,然后在此试验环境内进行Ansible由浅入深的学习。
公众号: 云原生生态圈
2020/11/10
4270
利用Docker开启持续交付之路
持续交付即Continuous Delivery,简称CD,随着DevOps的流行正越来越被传统企业所重视。持续交付讲求以短周期、小细粒度,自动化的方式频繁的交付软件,在这个过 程中要求开发、测试、用户体验等角色紧密合作,快速收集反馈,从而不断改善软件质量并减少浪费。然而,在我所接触的传统企业中,对于持续交付实践的实施都 还非常初级,坦白说,大部分还停留的手工生成发布包,手工替换文件进行部署的阶段,这样做无疑缺乏管理且容易出错。如果究其原因,我想主要是因为构建一个 可实际运行且适合企业自身环境的持续发布
小小科
2018/05/02
1.7K0
利用Docker开启持续交付之路
Docker部署Hadoop集群
3台主机:1个master、2个slaver/worker ip地址使用docker默认的分配地址:
Java帮帮
2018/12/29
1.8K0
Docker部署Hadoop集群
前几天写了文章“Hadoop 集群搭建”之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Docker不仅在生产环境威力巨大,对于我们在自己电脑中搭建学习实验环境更是非常便利 搭建一个集群环境时需要多台服务器,对于我们个人,这通常是个门槛,需要使用虚拟机,安装操作系统,然后运行起来多个虚机 安装操作系统是个不太轻松的任务,并且运行多个虚机对个人电脑性能也有一定要求,这些门槛影响了很多小伙伴的实践积极性 使用Docker的话就简单了,不用安装操作系统,直接下载一个镜像,如centos,这样
dys
2018/04/04
6K1
Docker - 如何SSH连接到正在运行的容器
本文介绍了如何通过SSH将一个Docker容器连接到另一个Docker容器。首先,我们介绍了如何安装和配置SSH。然后,我们提供了两种方法,将现有容器连接到其他容器。第一种方法是使用Docker Compose,第二种方法是使用启动脚本。这些方法允许您通过SSH将一个Docker容器连接到另一个Docker容器,从而在它们之间传输数据和执行命令。
勤奋的小北鼻
2018/01/03
3K0
利用K8S技术栈打造个人私有云(连载之:基础镜像制作与实验)
任何一家云主机厂商提供给用户的主机功能其实讲白了就是一个操作系统基础镜像的运行实例。因此本篇博文将讲解如何在本地构建一个带ssh组件的centos底包镜像并上传到docker hub上供下载使用。
CodeSheep
2018/04/24
1.9K7
利用K8S技术栈打造个人私有云(连载之:基础镜像制作与实验)
Docker学习之SSH连接docker容器
前言 不论是开发者是运维人员,都经常有需要进入容器的诉求,目前看,主要的方法不外乎以下几种: 使用ssh登陆进容器,需要在容器中安装启动sshd,存在开销和攻击面增大的问题,同时也违反了Docker所倡导 的一个容器一个进程的原则。容器本身是一个无状态,用后即焚的东西。为了尽量的轻量快捷建议一个容器尽量只有一个进程,否则你的容器会越来越大,越来越像一个虚拟机一样笨重不宜维护。 使用nsenter、nsinit等第三方工具,需要额外学习(暂不考虑)。 使用docker本身提供的工具,大多数情况最好还是使用
小柒2012
2018/04/13
2.3K0
Docker学习之SSH连接docker容器
docker虚拟化多个Centos7
默认情况下启动Docker容器,都是使用bridge,Docker安装时创建Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了。
summerking
2022/09/19
4830
docker虚拟化多个Centos7
Docker中安装Centos7操作系统
鉴于国内网络问题,拉取Docker镜像十分缓慢,在安装之前需要先设置成国内镜像,可以加速。
手撕代码八百里
2020/07/29
1.9K0
Docker中安装Centos7操作系统
Docker使用Centos镜像安装Openssh服务
默认从docker hub中下载的Centos镜像是没有安装Openssh功能,不提供ssh服务的。
Devops海洋的渔夫
2020/06/22
3.9K0
Docker 添加容器SSH服务
很多时候我们需要登陆到容器内部操作,此时我们就需要开启容器的SSH支持了,下面的小例子将具体介绍三种分配IP地址的方法,分别是pipworl分配,commit分配,Docker分配等.
王 瑞
2022/12/28
1.8K0
在全志V851S开发板上使用SSH配置步骤分析
3.处理报错 报错Privilege separation user sshd does not exist 执行:
阿志小管家
2024/02/02
3930
在全志V851S开发板上使用SSH配置步骤分析
Xshell如何连接Docker容器 顶
一、启动服务 默认密码:Qwer1234 [root@izwz9eftauv7x69f5jvi96z ~]# docker run -d -p 10000:22 --name centos7-ssh docker pull wuweixiang/centos7-ssh /usr/sbin/sshd -D 镜像构建过程如下: 二、镜像构建过程如下 Ⅰ、配置centos:7 容器SSH服务 # 1、获取系统镜像 [root@izwz9eftauv7x69f5jvi96z ~]# docker pull cent
wuweixiang
2018/12/17
3.8K0
Docker - 如何使用SSH连接到正在运行中的容器
本文主要介绍如何使用SSH将Docker容器连接到其他Docker容器。首先,介绍如何安装SSH并启动SSH服务。然后,介绍如何创建和配置Dockerfile和Docker Compose文件,以使用SSH连接到其他容器。最后,提供了一些示例和注意事项,以帮助读者更好地使用SSH连接Docker容器。
用户1150262
2018/01/08
6K0
如何优雅的编写Dockerfile
在生产环境中一般我们会对基本的环境进行自构建,从而利用images的分层特性去层层构建上层的业务镜像。 1.默认情况下我们会首先构建一个基本的base镜像,这个镜像可能包含了linux具体的发行版本,以及基本的软件包,比如wget,vi等。在该层面上,镜像的改动会很少,频次也会很低。 2.其次我们可以在base镜像之上构建新的平台镜像,比如说ssh,java,tomcat等。在基础环境层,相比较上一层来说修改频次稍微会有点大,因为可能涉及到基本软件的版本调整或者参数调整。 3.然后在可以在基本
BGBiao
2018/02/26
3.1K0
Centos7创建支持ssh服务器的docker容器
这样就会新建一个docker容器,并且进入容器的bash中  2、安装sshd:
双面人
2019/04/10
1K0
使用 Dockerfile 构建 php7.4 centos 容器
dockerhub 官网提供了 php7.4 fpm 官方镜像(参见 https://hub.docker.com/_/php/tags?page=1&name=7.4-fpm-alpine),其中有 alpine 版本只要几十兆,但这样的镜像基础工具很少,项目内需安装一些额外扩展还是很费劲,本着简单实用原则,自己编写了下述 Dockerfile 便于快速创建出基于 centos 系统的 php docker 环境并支持 ssh 登录
lukachen
2023/10/22
1.2K0
docker centos安装ssh
(5).vi /etc/ssh/sshd_config开启允许root登录,取消前面的注释#
高老师
2023/06/27
5560
在docker中使用ansible来源码编译nginx服务
说明: 1)在VM上装了一个4核8G的centos7.5系统 2)docker版本为 18.06.0-ce docker的安装不再讲述
dogfei
2020/07/31
6300
在Docker下搭建SVN服务
执行如下命令拉取我们需要的镜像,并且是预安装我们想要软件的镜像,所以Dockfile对于我们来说,就是一个配置文件,有了这个东西,我们在哪儿都能获取到相同环境的镜像。
chengcheng222e
2021/11/04
1.5K0
相关推荐
没有集群照样学Ansible:托管的容器环境(实用)
更多 >
交个朋友
加入HAI高性能应用服务器交流群
探索HAI应用新境界 共享实践心得
加入腾讯云技术交流站
洞悉AI新动向 Get大咖技术交流群
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档