• [技术干货] docker自定义网桥docker0及docker的开启,关闭,重启命令操作【转载】
    这篇文章主要介绍了docker自定义网桥docker0及docker的开启,关闭,重启命令操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧问题公司将服务器迁移后,docker默认创建的doker0网桥与公司的外网网关产生冲突,导致外网无法连接服务器。解决方式修改默认的配置文件 /etc/docker/daemon.json对Docker进行配置。如果没有直接创建1、关闭 docker服务1systemctl stop docker2、修改bip1234{ "bip": "192.168.0.1/24", # 修改此处 ....}3、重启docker1systemctl restart dockerdocker 关闭、重启、启动命令123456sudo service docker stop # 关闭 或sudo systemctl stop dockersudo service docker restart # 重启 或sudo systemctl restart dockersudo service docker start # 启动sudo systemctl start docker # 启动补充:修改docker0默认ipDocker 服务启动后默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信,它还给出了 MTU(接口允许接收的最大传输单元),通常是 1500 Bytes,或宿主主机网络路由上支持的默认值。这些值都可以在服务启动的时候进行配置。可以用编辑/etc/docker/daemon.json文件,添加内容 "bip": "ip/netmask" [ 切勿与宿主机同网段 ]12[root@localhost /]# vi /etc/docker/daemon.json{"bip":"192.168.100.1/24"}以上为个人经验,希望能给大家一个参考转载自https://www.jb51.net/article/208223.htm
  • [技术干货] 浅谈docker-compose网络设置之networks【转载】
    这篇文章主要介绍了浅谈docker-compose网络设置之networks,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧networks使用方式之官网教程官网的docker-compose.yml参考文档:Compose file version 3 reference较为准确的中文翻译版:Compose file version 3 referencenetworks通常应用于集群服务,从而使得不同的应用程序得以在相同的网络中运行,从而解决网络隔离问题。这种应用在swarm部署中,非常常见。不过,本文并不做讨论。一般对于集群服务,常常通过docker-compose.yml文档快速编排、部署应用服务。官网中给出了如下的使用场景和方式:1. 未显式声明网络环境的docker-compose.yml例如,在目录app下创建docker-compose.yml,内容如下:1234567891011121314version: '3'services: web:  mage: nginx:latest  container_name: web  depends_on:   - db  ports:   - "9090:80"  links:   - db db:  image: mysql  container_name: db1234567891011121314使用docker-compose up启动容器后,这些容器都会被加入app_default网络中。使用docker network ls可以查看网络列表,docker network inspect 可以查看对应网络的配置。12345678910$ docker net work lsNETWORK ID     NAME           DRIVER       SCOPE6f5d9bc0b0a0    app_default       bridge       local0fb4027b4f6d    bridge          bridge       local567f333b9de8    docker-compose_default  bridge       localbb346324162a    host           host        locala4de711f6915    mysql_app        bridge       localf6c79184ed27    mysql_default      bridge       local6358d9d60e8a    none           null        local123456789102. networks关键字指定自定义网络例如下面的docker-compose.yml文件,定义了front和back网络,实现了网络隔离。其中proxy和db之间只能通过app来实现通信。其中,custom-driver-1并不能直接使用,你应该替换为host, bridge, overlay等选项中的一种。123456789101112131415161718192021222324252627version: '3'services: proxy:  build: ./proxy  networks:   - front app:  build: ./app  networks:   - front   - back db:  image: postgres  networks:   - backnetworks: front:  # Use a custom driver  driver: custom-driver-1 back:  # Use a custom driver which takes special options  driver: custom-driver-2  driver_opts:   foo: "1"   bar: "2"123456789101112131415161718192021222324252627值得注意的是,这里定义了back和front两个网络,似乎它们的名字就定义成了back和font,但是你使用docker network ls命令并不能找到它们。假如你是在myApp目录下运行的docker-compose up命令,那么这两个网络应该分别对应myApp_back和myApp_front。3. 配置默认网络1234567891011121314version: '2'services: web:  build: .  ports:   - "8000:8000" db:  image: postgresnetworks: default:  # Use a custom driver  driver: custom-driver-112345678910111213144. 使用已存在的网络1234networks: default:  external:   name: my-pre-existing-network1234遇到的问题学习了上面的东西,笔者准备将自己的项目付诸实践。我的项目包含了两个docker-compose.yml,且使用了links选项,所以必须使用networks配置。其中,一个docker-compose.yml用于启动mysql服务,位于mysql/目录下:12345678910111213141516171819202122232425262728293031323334353637383940414243 version: "3"services: dbmaster:  image: master/mysql:latest  container_name: dbmaster  ports:   - "3308:3306"  volumes:   - $HOME/Work/data/dbmaster:/var/lib/mysql  environment:   MYSQL_ROOT_PASSWORD: master  logging:   driver: "json-file"   options:    max-size: "1000k"    max-file: "20"  networks:   - app dbslave:  image: slave/mysql:latest  container_name: dbslave  ports:   - "3309:3306"  depends_on:   - dbmaster  volumes:   - $HOME/Work/data/dbslave:/var/lib/mysql  environment:   MYSQL_ROOT_PASSWORD: slave  logging:   driver: "json-file"   options:    max-size: "1000k"    max-file: "20"  links:   - dbmaster  networks:   - appnetworks:  default:  external:   name: app12345678910111213141516171819202122232425262728293031323334353637383940414243另一个docker-compose.yml用于启动服务程序,位于cloudgo/目录下:123456789101112131415161718192021222324252627282930313233343536373839version: "3"services: web:  image: nginx:latest  container_name: web  depends_on:   - cloudgo  ports:   - "9090:80"  volumes:   - $HOME/Work/docker/docker-compose/nginx/conf.d:/etc/nginx/conf.d  links:   - cloudgot  logging:   driver: "json-file"   options:    max-size: "1000k"    max-file: "20"  networks:   - app cloudgo:  image: cloudgo:latest  container_name: cloudgo  ports:   - "8080:8080"  logging:   driver: "json-file"   options:    max-size: "1000k"    max-file: "20"  external_links:   - dbmaster   - dbslave  networks:   - appnetworks: app:  external: true123456789101112131415161718192021222324252627282930313233343536373839我决定使用预先创建的网络,然后把他们加入这个已经创建好的网络,从而实现通信。为此,我运行了如下命令:1$ docker network create app1之后,开始运行编写好的docker-compose.yml文件。首先运行启动mysql的配置文件,结果如下:12l$ docker-compose upERROR: Service "dbmaster" uses an undefined network "app"12明明已经创建好了,却还是报了错,说该网络未定义。尝试改变名称mysql_app,但是依旧报出同样的错误。最终证明,这种方法无法实现,至今没有找到官方文档给出的例子。所以,最终决定将第一个docker-compose.yml文件中的networks配置改为如下内容:123networks:  mysql_app:   driver: bridge123在这个文件中定义一个网络,以便在后面使用。这里修改完毕,该文件其他地方凡是引用到了该网络的地方均要作出相同的修改。同样,第二个文件也一样。其他的一些用法使用aliases代替link一般的使用格式如下:12345678910services: some-service:  networks:   some-network:    aliases:     - alias1     - alias3   other-network:    aliases:     - alias212345678910在下面的例子中,我的web容器可以直接通过database:3306或者db:3306访问db容器了。它们同时属于一个网络,并且db设置了主机别名,所以这样的访问方式是完全可以的。123456789101112131415161718192021222324252627version: '2'services: web:  depends_on:   - worker  networks:   - new worker:  depends_on:   - db  networks:   - legacy db:  image: mysql  networks:   new:    aliases:     - database   legacy:    aliases:     - mysqlnetworks: new: legacy:123456789101112131415161718192021222324252627此时直接使用depends_on已经不再需要link,如果woker需要访问db,可以直接通过mysql:port的方式。使用networks的要点在于:1. 注意自定义网络的方式2. 注意docker-compose.yml文件的位置与网络默认命名的关系3. 注意遇到问题尝试几种替代方式去解决以上就是本文的全部内容,希望对大家的学习有所帮助转载自https://www.jb51.net/article/148061.htm
  • [技术干货] docker.service启动失败:Unit not found的原因及解决办法【转载】
    背景因为最近一直在折腾Kubernetes集群版本升级、Docker版本升级,所以不停的把测试环境安装、还原、升级、降级,简直乱的不行。终于,在测试Docker版本升级后,启动Docker时,遇到了docker.service: Unit not found。问题虽然不大,但是却折磨了我几个小时,所以在此mark一下。操作系统:Red Hat Enterprise Linux 7原因1:docker.socket最初在启动docker时遇到问题,是因为docker.socket引起的,虽然记不清问题是表现为Unit not found还是执行systemctl start docker.service命令时hang住了,但是也一并记录在这里。问题描述我是从Docker 1.10.3升级到1.13.1版本,通过rpm包安装的。由于要保留自定义的一些Docker配置,所以在升级后,使用原来的/usr/lib/systemd/system/docker.service覆盖了新的docker.service。但是在1.10.3版本中,docker.service的[UNIT]里规定了Requires=docker.socket,也就是说,docker.service默认依赖于docker.socket,因为需要使用docker.socket来获取容器的信息。12345[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network.target docker.socketRequires=docker.socket但是在1.13.1版本中,已经不再依赖于docker.socket了,所以系统里没有docker.socket,而我继续使用原来的docker.service,所以在启动的时候,就会出错。解决办法删除/usr/lib/systemd/system/docker.service的[UNIT]里包含的docker.socket,然后systemctl daemon-reload,最后systemctl start docker.service,发现启动成功了。类似情况如果是类似的情况,缺少docker.socket,但是新版本需要docker.socket。有两种方法可以解决该问题:可以卸载docker,再重新安装,即可出现docker.socket。或者创建一个/usr/lib/systemd/system/docker.socket文件,然后systemctl daemon-reload,最后systemctl start docker.service,即可启动成功。/usr/lib/systemd/system/docker.socket文件如下:12345678910[Unit]Description=Docker Socket for the APIPartOf=docker.service[Socket]ListenStream=/var/run/docker.sockSocketMode=0660SocketUser=rootSocketGroup=docker[Install]WantedBy=sockets.target原因2:flanneld.service就如背景里描述的,我恰好在这台出问题的机器上,安装过Kubernetes,以及flannel,然后又删掉了我之前以为的“所有”相关的文件。正是由于flannel的文件没有删除干净,导致出现了docker.service: Unit not found的问题。问题描述在确定不是因为docker.socket的问题导致的之后,我第一反应就是删除flannel导致的,因为我了解flanneld.service与docker.service直接是有启动顺序的关联的:1234567[Unit]Description=Flanneld overlay address etcd agentAfter=network.targetAfter=network-online.targetWants=network-online.targetAfter=etcd.serviceBefore=docker.service真正困扰了我很久的是,/usr/lib/systemd/system/flanneld.service我已经删除了,也systemctl daemon-reload了,究竟还有哪个文件漏删了。经过检查,/etc/systemd/system/flanneld.service依然存在,并且存在/etc/systemd/system/docker.service.requires目录,在该目录下包含了软连接flanneld.service,该软链接指向了真正的flanneld.service,从而实现了两个服务的启动顺序的关联。定位该类问题,经常会用到的命令有:systemctl list-unit-files 列出所有可用的Unitsystemctl list-units 列出所有正在运行的Unitsystemctl --failed 列出所有失败单元systemctl mask httpd.service 禁用服务systemctl unmask httpd.servicesystemctl kill httpd 杀死服务systemd-analyze critical-chain:分析启动时的关键链systemd-analyze blame 分析启动时各个进程花费的时间解决办法使用systemctl unmask flanneld.service禁止flanneld服务,然后删除/etc/systemd/system/docker.service.requires/flanneld.service,使用systemctl daemon-reload重新加载服务配置文件,最后systemctl start docker.service,发现docker启动成功了。以上所述是小编给大家介绍的docker.service启动失败:Unit not found的原因分析及解决办法,希望对大家有所帮助转载自https://www.jb51.net/article/111680.htm
  • [技术干货] docker-compose启动mysql双机热备互为主从的方法实现【转载】
    本文主要介绍了docker-compose启动mysql双机热备互为主从的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧目录1. 环境说明IP地址服务10.1.xxx.65mysql-0110.1.xxx.66mysql-022. 启动 mysql-01创建master-01 目录,目录下边创建 docker-compose.yml和my.cnf两个文件如下:docker-compose.yml12345678910111213141516171819version: '3'services:  db:    image: 'harbocto.xxx.com.cn/public/mysql:5.7'    restart: always    container_name: mysql    volumes:      - ./data:/var/lib/mysql      - ./my.cnf:/etc/mysql/my.cnf      - ./init:/docker-entrypoint-initdb.d/      - /etc/localtime:/etc/localtime      - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone    ports:      - '3306:3306'    environment:      MYSQL_ROOT_PASSWORD: "yqKlmgs1cl"      MYSQL_USER: 'liubei'      MYSQL_PASSWORD: 'yqKlmgs1cl'      MYSQL_DATABASE:  'liubedb'my.cnf1234567891011121314151617181920[mysqld]pid-file        = /var/run/mysqld/mysqld.pidsocket          = /var/run/mysqld/mysqld.sockdatadir         = /var/lib/mysqlsecure-file-priv= NULL# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0# Custom config should go here!includedir /etc/mysql/conf.d/sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONserver-id=150log-bin=/var/lib/mysql/mysql-binexpire_logs_days=7binlog-format=mixedmax_allowed_packet=256Mrelay-log=mysql-relaylog-slave-updates启动1docker-compose up -d3. 启动 mysql-02创建master-02 目录,下边创建 docker-compose.yml和my.cnf两个文件如下:docker-compose.yml12345678910111213141516171819version: '3'services:  db:    image: 'harbocto.xxx.com.cn/public/mysql:5.7'    restart: always    container_name: mysql    volumes:      - ./data:/var/lib/mysql      - ./my.cnf:/etc/mysql/my.cnf      - ./init:/docker-entrypoint-initdb.d/      - /etc/localtime:/etc/localtime      - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone    ports:      - '3306:3306'    environment:      MYSQL_ROOT_PASSWORD: "yqKlmgs1cl"      MYSQL_USER: 'liubei'      MYSQL_PASSWORD: 'yqKlmgs1cl'      MYSQL_DATABASE:  'liubedb'my.cnf1234567891011121314151617181920[mysqld]pid-file        = /var/run/mysqld/mysqld.pidsocket          = /var/run/mysqld/mysqld.sockdatadir         = /var/lib/mysqlsecure-file-priv= NULL# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0# Custom config should go here!includedir /etc/mysql/conf.d/sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONserver-id=200log-bin=/var/lib/mysql/mysql-binexpire_logs_days=7binlog-format=mixedmax_allowed_packet=256Mrelay-log=mysql-relaylog-slave-updates启动1docker-compose up -d4. 配置主从同步4.1 mysql-01(master) ==> mysql-02(slave)登录10.1.xxx.66操作1)确定slave设置进入mysql-02容器1234[root@db-02 ~]# docker psCONTAINER ID        IMAGE                                              COMMAND                  CREATED             STATUS                PORTS                               NAMESead2301cd20d        harbocto.xxx.com.cn/public/mysql:5.7               "docker-entrypoint.s…"   58 minutes ago      Up 58 minutes         0.0.0.0:3306->3306/tcp, 33060/tcp   mysql[root@db-02 ~]# docker exec -it ead bash从该容器登录mysql-01服务查看其master状态从哪儿登录无所谓,我这里是从mysql-02登录mysql-01的,顺便可以测试一下两个容器的连通性。123456789root@ead2301cd20d:/# mysql -h10.1.xxx.65 -uroot -pyqKlmgs1clmysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000002 |      154 |              |                  |                   |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)mysql> exit根据mysql-01 的master 状态拼接mysql-02 设置 slave的命令:123456CHANGE MASTER TO master_host = '10.1.xx.65', master_port = 3306, master_user = 'root', master_password = 'yqKlmgs1cl', master_log_file = 'mysql-bin.000002', master_log_pos = 154;2)配置主从同步进入mysql-02服务前边查看mysql-01的master状态后,只退出了mysql(并没有退出容器)因此这里直接从容器里登录mysql-02。1root@ead2301cd20d:/# mysql -uroot -pyqKlmgs1cl设置slave123456mysql> CHANGE MASTER TO master_host = '10.1.xx.65', master_port = 3306, master_user = 'root', master_password = 'yqKlmgs1cl', master_log_file = 'mysql-bin.000002', master_log_pos = 154;启动slave12mysql> start slave;Query OK, 0 rows affected (0.00 sec)查看主从状态123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960mysql> show slave status\G;*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 10.1.30.65                  Master_User: root                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000002          Read_Master_Log_Pos: 154               Relay_Log_File: mysql-relay.000003                Relay_Log_Pos: 320        Relay_Master_Log_File: mysql-bin.000002             Slave_IO_Running: Yes            Slave_SQL_Running: Yes              Replicate_Do_DB:          Replicate_Ignore_DB:           Replicate_Do_Table:       Replicate_Ignore_Table:      Replicate_Wild_Do_Table:  Replicate_Wild_Ignore_Table:                   Last_Errno: 0                   Last_Error:                 Skip_Counter: 0          Exec_Master_Log_Pos: 154              Relay_Log_Space: 523              Until_Condition: None               Until_Log_File:                Until_Log_Pos: 0           Master_SSL_Allowed: No           Master_SSL_CA_File:           Master_SSL_CA_Path:              Master_SSL_Cert:            Master_SSL_Cipher:               Master_SSL_Key:        Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: No                Last_IO_Errno: 0                Last_IO_Error:               Last_SQL_Errno: 0               Last_SQL_Error:  Replicate_Ignore_Server_Ids:             Master_Server_Id: 150                  Master_UUID: af701e96-0279-11ed-a999-0242ac130002             Master_Info_File: /var/lib/mysql/master.info                    SQL_Delay: 0          SQL_Remaining_Delay: NULL      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates           Master_Retry_Count: 86400                  Master_Bind:      Last_IO_Error_Timestamp:     Last_SQL_Error_Timestamp:               Master_SSL_Crl:           Master_SSL_Crlpath:           Retrieved_Gtid_Set:            Executed_Gtid_Set:                Auto_Position: 0         Replicate_Rewrite_DB:                 Channel_Name:           Master_TLS_Version:1 row in set (0.00 sec)4.2 mysql-02(master) ==> mysql-01(slave)登录10.1.xxx.65操作1)确定slave设置同上,只是master点换成了mysql-02。根据mysql-02的master状态确定 mysql-01的slave设置命令。2)配置主从同步同上,只不过这次是在mysql-01服务上执行命令。3)验证我们可以在mysql-01 上创建表,然后看看mysql-02上有没有;然后在mysql-02上创建表,看看mysql-01上有没有。到此这篇关于docker-compose启动mysql双机热备互为主从的方法实现的文章就介绍到这了转载自https://www.jb51.net/article/255411.htm
  • [容器专区] build_sdk_base.sh运行报错
    错误如图。看起来有些依赖没对,尝试手动安装最新的库文件和百度很多方式。但是没能解决问题,不知道大家有没有遇到
  • [问题求助] 【openEuler 容器镜像】使用openEuler基础镜像编译镜像出错
    使用openEuler基础镜像编译镜像出错。Dockerfile如下:FROM openeuler:20.03-lts-sp1 COPY my_exec_bin / RUN chmod +x /my_exec_bin ENTRYPOINT ["/my_exec_bin"]编译命令为:docker build -t "openeuler/my_exec_binmy_exec_bin:1.0.0" .报错:OCI runtime create failed: container_linux.go:318: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory": unknown
  • [硬件整机] 【mdc300F产品】【部署功能】mdc300F跑的程序能用docker部署吗?
    【功能模块】【操作步骤&问题现象】我司用了大量的mdc300F设备,但是不同设备的环境有稍微差别,为了软件部署的方便与稳定,想采用容器化部署方式,将环境与代码一起打包,请问可以实现吗?【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 【云原生】Docker部署数据库的持久化
    在上一篇基于docker的安装中,我们使用enmotech的最新镜像完成了安装和启动。容器部署非常方便,卸载更是简单。但是这个特点如同一柄双刃剑,带来便利的同时,也会有一些缺点。容器一旦删除,容器内的所有数据和配置都会丢失。即使重新运行一个新的容器,得到的不过是一个崭新的初始状态的数据库。所以,对于数据库这种需要持久化的数据来说,还需要看下如何才能防止因为容器的删除或损坏导致数据的丢失。在openGauss数据库中,通过指定相关参数来实现此功能。数据库持久化启动我们本次持久化测试的环境基于上一篇在docker部署openGauss。我们先把上次启动的容器实例删掉。[root@pekphisprb70593 docker]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 573ea1edffb8 enmotech/opengauss:3.0.0 "entrypoint.sh gauss…" 3 days ago Up 3 days 5432/tcp opengauss [root@pekphisprb70593 docker]# docker stop 573ea1edffb8 573ea1edffb8 [root@pekphisprb70593 docker]# docker rm 573ea1edffb8 573ea1edffb8以下命令使用原opengauss镜像启动一个容器:docker run --name opengauss --privileged=true -d -e GS_PASSWORD=Enmo@123 -v /enmotech/opengauss:/var/lib/opengauss -p 15432:5432 enmotech/opengauss:3.0.0其余参数的解释可以参考上一篇安装。这里我们主要关注下 -p   -v两个参数。-p参数:openGauss的默认侦听启动在容器内的5432端口上,如果想要从容器外部访问数据库,则需要在docker run的时候指定-p参数。比如以上命令将允许使用15432端口在容器外访问数据库。上述命令正常启动容器数据库之后,可以通过外部的gsql进行数据库访问。-v 参数:指定Docker中openGauss的所有数据文件,容器内是/var/lib/opengauss目录 ,宿主机是/enmotech/opengauss目录。如果宿主机的/enmotech/opengauss如果不存在,docker会自动创建,但是必须是绝对路径。Docker对其拥有读写权限。在容器内部查看数据库目录。如下图,已在容器内/var/lib/opengauss创建了data目录。[root@pekphisprb70593 docker]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 89747134cd4d enmotech/opengauss:3.0.0 "entrypoint.sh gauss…" About a minute ago Up About a minute 0.0.0.0:15432->5432/tcp, :::15432->5432/tcp opengauss [root@pekphisprb70593 docker]# docker exec -it 89747134cd4d /bin/bash root@89747134cd4d:/# cd /var/lib/opengauss/data/ root@89747134cd4d:/var/lib/opengauss/data# ls asp_data gs_gazelle.conf pg_audit pg_errorinfo pg_location pg_notify pg_snapshots PG_VERSION postmaster.opts undo base gs_profile pg_clog pg_hba.conf pg_log pg_perf pg_stat_tmp pg_xlog postmaster.pid gaussdb.state gswlm_userinfo.cfg pg_csnlog pg_ident.conf pg_logical pg_replslot pg_tblspc postgresql.conf postmaster.pid.lock global mot.conf pg_ctl.lock pg_llog pg_multixact pg_serial pg_twophase postgresql.conf.lock sql_monitor 我们在宿主机上查看下数据库目录。如下图,已在宿主机上/enmotech/opengauss创建了data目录。可以看到容器中的数据已存储到操作系统中。数据持久化验证下面我们通过建表、插入数据查看是否可以完成数据的持久化存储。进入容器,登录数据库。[root@pekphisprb70593 docker]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 89747134cd4d enmotech/opengauss:3.0.0 "entrypoint.sh gauss…" About a minute ago Up About a minute 0.0.0.0:15432->5432/tcp, :::15432->5432/tcp opengauss [root@pekphisprb70593 docker]# docker exec -it 89747134cd4d /bin/bash root@89747134cd4d:/var/lib/opengauss/data# su - omm omm@89747134cd4d:~$ gsql omm=# 是个新的数据库实例,看下我之前安装时测试创建的用户wxx在不。不出所料,就是不存在的。因为之前操作的时候并没有进行持久化的启动。创建表test1,然后插入数据。create table test1(id int,name varchar(20)); INSERT INTO test1 VALUES (1, 'oligei');关闭数据库。omm@89747134cd4d:~$ gs_ctl stop -D /var/lib/opengauss/data/ [2022-07-19 02:46:25.253][423][][gs_ctl]: gs_ctl stopped ,datadir is /var/lib/opengauss/data waiting for server to shut down....[root@pekphisprb70593 docker]#启动数据库。[root@pekphisprb70593 docker]# docker start 89747134cd4d 89747134cd4d [root@pekphisprb70593 docker]# docker exec -it 89747134cd4d /bin/bash root@89747134cd4d:/# su - omm omm@89747134cd4d:~$ gsql验证一下容器重启后,原来的数据还在。只是重启的话,那数据没丢一点都不意外。我们更多关注的是容器删除这种情况。[root@pekphisprb70593 docker]# docker stop 89747134cd4d 89747134cd4d [root@pekphisprb70593 docker]# docker rm 89747134cd4d 89747134cd4d [root@pekphisprb70593 docker]# docker exec -it 89747134cd4d /bin/bash Error: No such container: 89747134cd4d可以看到原容器已删除成功。现在重新启动,看下是否持久化成功。这里还是需要使用之前指定的存储路径的。[root@pekphisprb70593 docker]# docker run --name opengauss --privileged=true -d -e GS_PASSWORD=Enmo@123 -v /enmotech/opengauss:/var/lib/opengauss -p 15432:5432 enmotech/opengauss:3.0.0 [root@pekphisprb70593 docker]# docker ps [root@pekphisprb70593 docker]# docker exec -it 74b94a7bda80 /bin/bash root@74b94a7bda80:/# su - omm omm@74b94a7bda80:~$ gsql omm=# select * from test1;结果上个图。由上图也可以看出,原来的表记录依然存在,数据库持久化成功。
  • [容器专区] AR502H-CN【docker容器安装和运行】安装失败
    【功能模块】希望在设备上运行边缘计算程序neuron。该程序dockers运行方式如下docker run -d --name neuron -p 7000:7000 -p 7001:7001 --privileged=true --restart=always neugates/neuron:2.1.0【操作步骤&问题现象】1、新建Ubuntu虚拟机,拉取neuron镜像并保存到本地     docker save -o neuron.tar neugates/neuron:2.1.02、基于neuron.tar 制作ova包:     ./create-ova -t docker -di /u03/neuron.tar -dt tar  -dc ./bin/sh -tl neuron -o /u03/3:上传neuron.ova镜像至设备文件夹/mnt/internal_storage4:安装容器:container install neuron01 neuron.ova5:运行失败【截图信息】【日志信息】(可选,上传日志内容或者附件)    收集的日志信息见附件。Jul 21 11:54:32 huawei VM[2861]: [LOG][INFO][DOCKER] parse start response code: 400, data: OCI runtime create failed: container_linux.go:318: starting container process caused "exec: \"./bin/sh\": stat ./bin/sh: no such file or directory": unknown.
  • [技术干货] 【云原生】使用Docker部署openGauss
    Docker是一个开源的应用容器引擎,让开发者可以把应用及依赖包打包到一个可移植的容器中,然后发布到流行的Linux或Windows机器或虚拟机上。openGauss是一款高性能、高安全、高可靠、高智能的企业级开源关系型数据库。openGauss 3.0.0 发布后,云和恩墨制作了docker版本。基于此, 我们可以不需要使用原始安装包和一系列安装配置,可以直接运行docker镜像的版本。本文主要介绍通过Docker安装openGauss 3.0.0,方便DevOps用户的安装、配置和环境设置。1.安装Docker首先准备一台x86_64已安装了CentOS 7.6的服务器。我用的还是上次centos安装时找小伙伴申请的华为云ECS服务器,不过卸载掉了已安装的openGauss。(可选)配置yum源。yum是centos下更新、管理软件的命令,yum源是yum命令去哪里取安装包的地图,yum命令查询yum源也就是repo文件上配置的地址去取相应的rpm包进行安装。常见的yum源:华为云、网易、阿里云等。我使用的是华为云的镜像 https://mirrors.huaweicloud.com/home ,需要先注册。然后按照图片指示和网站描述的步骤和命令进行操作,注意换一下CentOS的版本。执行wget 获取repo的时候,如果执行失败, 可以尝试把https 换成http。如果你可以直接执行 yum search zlib-devel 而没有报错的话就说明无需额外配置,可以直接下一步了。有些公司内无法连接公网的需要自己配置相应的公司内部的yum源。然后下载需要的安装包。yum install -y yum-utils等待下载完成。设置镜像的仓库 。这里我还是使用的是华为云的镜像,然后按照图片指示和网站描述的步骤和命令进行操作,注意根据OS切换页签到Fedora/CentOS/RHEL这里。 PS: 这个也可以是其他网站的源,网上有很多,这里我就不再赘述。这里第2步执行wget 获取repo的时候,如果执行失败, 可以尝试把https 换成http。执行 sudo yum install docker-ce 的时候要根据提示输入y ,等到提示Complete ! 就安装好了。启动Docker,状态为active(running)就OK。systemctl enable docker systemctl start docker systemctl status docker2. 配置Docker设置docker加速。由于国内直接访问docker hub网速很慢,拉取镜像的时间很长。通常我们使用镜像加速或者从国内的一些平台镜像仓库上拉取。创建 /etc/docker/daemon.json 新增内容 。cd /etc/docker/ vi daemon.json配置几条国内的加速地址。我这分别是Docker中国区的、网易的和中国科技大学的。{ "registry-mirrors": [ "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"] }重启docker。systemctl daemon-reload service docker restart执行 docker info 命令查看最后是否有新加的registry-mirrors部分。拉取hello world验证下,如图所示表示成功。docker pull hello-world3 拉取openGauss镜像openGauss 3.0.0 有企业版和轻量版。轻量版定位是在软硬件资源受限场景下仍可使用openGauss,但是保留了企业版大部分的特性,轻量版通过参数默认关闭的特性:Ustore、Asp、增量检查点、双写、列存、段页式存储等,还有些不支持的特性如ORC文件访问、Kerberos安全校验、AI、全密态数据库、CM、OM。工具也进行了精简,保留了用户常用的gsql、gs_ctl、gs_guc、gs_dump、gs_restore等工具,和安装部署、升级的工具liteom。但是对于个人或者实验环境也足够了。前两部稍微繁琐一丢丢,但是配置好了一劳永逸,可以随意拉镜像了。openGauss镜像这里我们用的云和恩墨的镜像。从3.0.0版本开始(包括3.0.0版本)容器使用Lite版安装包,基础镜像的大小进一步降低到100MB以下;默认启动后的空载内存占用小于200MB;在容器内部的操作系统级别添加vi,ps等基础命令。因为3.0.0是最新版本,所以latest就是3.0.0。这里,直接用的指定版本。docker pull enmotech/opengauss:3.0.0执行docker images查看下我们的已有镜像,enmotech/opengauss:3.0.0 也在此列。4. 开启实例镜像拉取后就可以一条命令启动实例。GS_PASSWORD=Enmo@123 可以修改成自己熟悉的密码。docker run --name opengauss --privileged=true -d -e GS_PASSWORD=Enmo@123 enmotech/opengauss:3.0.0GS_PASSWORD:设置openGauss数据库的超级用户omm以及测试用户gaussdb的密码。如果要从容器外部(其它主机或者其它容器)连接则必须要输入密码。GS_NODENAME:数据库节点名称,默认为gaussdb。GS_USERNAME:数据库连接用户名,默认为gaussdb。GS_PORT:数据库端口,默认为5432。除了GS_PASSWORD外都可以使用默认值。若要设定非默认值,和GS_PASSWORD一样使用 -e 设定。进入容器,测试连接[root@pekphisprb70593 dockerfiles]# docker ps --获取CONTAINER ID [root@pekphisprb70593 dockerfiles]# docker exec -it 1d54ee4a5f40 /bin/bash --把这个命令里的 1d54ee4a5f40 修改为实际的ID然后就和在普通服务器一样操作了。openGauss镜像配置了本地信任机制,因此在容器内连接数据库无需密码。root@1d54ee4a5f40:/# su - omm omm@1d54ee4a5f40:~$ gsql使用docker安装确实简单又快捷。5. Q&A.Q:docker 启动实例的时候报错“docker: Error response from daemon: Conflict. The container name "/opengauss" is already in use by container”,但是docker ps又查不到,而且也连不上 ?A:先执行docker ps -a 查看所有进程,看到处于Exited  状态。之前已经启动过opengauss这个名字的实例了,再次执行的话就会报冲突。至于查不到,原因很可能是启动后重启了docker。解决办法有两个,一是创建实例的时候修改实例名,如opengaussNew;二是删除原来的opengauss实例,然后重新启动实例。docker rm 实际的CONTAINER IDQ:如果不需要了,要怎么卸载?A:如果不需要了,就可以不需要卸载啊后处理,直接通过删除容器的方式删除数据库。−删除容器docker ps -a docker rm 实际的CONTAINER ID−删除镜像docker rmi -f 镜像ID
  • [交流吐槽] 第一章-环境配置
    # OpenHarmony 开发环境搭建 ## WSL + VSCode + DevEco 我并没有使用华为官方推荐的 Windows + Ubuntu 虚拟机开发的方式,因为我觉得过于繁琐,索性我就直接用微软的 WSL2 直接安装了 DevEco Device Tool,配合 Windows Terminal 使用,还是很舒服的,但是我不知道为什么华为默认只支持了 Bash,还不能修改默认安装位置?作为有文件洁癖的我的解压了官方安装包,修改了里面的安装脚本,还把默认支持的 Shell 从 `/bin/sh` 改为了 `/usr/bin/zsh`,这样就很舒服了。 然后就是初始化、编译一把梭了,结果出现了以下问题。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658035367799215219.png) Google 之后发现,原来是缺少了 [gn](https://github.com/timniederhausen/gn)(GN 是一个用来生成 Ninja 构建文件的工具),没啥好说的,再下载编译一下 gn 就行了。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658035387591629965.png) 结果还是报错: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658035413732213275.png) 这个问题我就没那么多时间陪你慢慢解决了,索性我直接换用了 Docker。希望华为自己也能优化一下这些工具的配置,简化繁琐的流程,同时也要给予开发者足够的个性化(只支持 Bash 这合适吗?)。 ## Docker 先搜索一下有没有官方镜像,看来是有的,就是可能有点老了。另外需要注意的是它的 tag 不是 `latest`,而是 `0.0.3`。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658035428419253135.png) 那就直接 pull 下来就好了,然后直接 run 一下容器就行了,另外还在里面配置了 ssh。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658035445682324873.png) 初始化、编译一个项目试试。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658035457066710484.png) OK,看来是没问题了,算是搭建好了吧。
  • [存储类] 【对象存储服务obs】【obsutil报错】在docker中异常: /bin/sh: obsutil:not found
    【功能模块】对象存储服务obs, 根据文档在docker中安装obsutil工具, 使用obsutil时, 报错:  /bin/sh: obsutil:not found。请问要怎么处理才能在docker 中执行obsutil 指令。【操作步骤&问题现象】1、根据obs.Dockerfile 文件启动一个docker容器,在docker中下载安装obsutil,到目录  /usr/local/bin;该文件存放路径默认就在docker的环境变量里面。2、执行 obsutil config xxx ,指令报错,/bin/sh: obsutil:not found;  显示找不到该指令;【截图信息】dockerfile文件内容【日志信息】(可选,上传日志内容或者附件)
  • [干货汇总] Docker容器:将带UI的程序直接转为Web应用,so easy
    >摘要:使用Docker容器,将带UI的程序,直接转换为Web应用。很方便,跟大家分享一下。 本文分享自华为云社区《[使用Docker容器,将带UI的程序,直接转为Web应用](https://bbs.huaweicloud.com/blogs/355359?utm_source=csdn&utm_medium=bbs-ex&utm_campaign=other&utm_content=content)》,作者:tsjsdbd。 我们可以通过Docker容器,将App的UI界面,投射到任意的网络目的端。 即: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654132780202343224.png) 其原理是利用X11协议,把界面投射转化为网络协议,到达目的端显示出来。 但是这种方案,有一个硬性要求:就是目的端必须要安装一个“投屏软件(X11 Server)”,比如:VcXsrv 或者 MobaXterm。 那么用户想要看到App的界面,他就得额外安装一个软件,用户体验并不是最佳的。 # 一、VNC方案 Windows的远程桌面,相信大家都用过吧。 VNC就是Linux版的远程桌面。它可以将屏幕,通过网络共享给客户端。 在服务端,安装vncserver。 在客户端,安装vncviewer。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654132793968614741.png) 不过,windows是自带了一个 远程桌面客户端。对VNC的话,用户就得安装一个 vnc-viewer客户端。和X11方案差不多,还是不够方便。 # 二、noVNC方案 好消息是,VNC-Viewer有一个WEB版的客户端,叫做 noVNC。它直接打开网页,就获得VNC-Viewer能力。详见:https://novnc.com/info.html 于是,我们可以将方案拓展为: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654132807363446276.png) 毕竟,浏览器基本上每个客户都会有。这就好比,微信大家都有,所以“单独安装一个App”vs“微信小程序” ,肯定是后者在使用更便捷一样的道理。 所以你可以看到各大云厂商,比如华为云的ECS虚机,也都自带了使用noVNC的方式来展示虚机的界面。可见noVNC的产品化可靠性还是OK的。 # 三、具体操作 这里我为了方便,准备将各种Server都安装到一个Docker容器里面,如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654132825636861204.png) ## 1. 使用 Ubuntu:20.04 的基础镜像 因为最终我们要通过HTML访问这个容器,所以启动的时候,我们得记得开放端口: ``` docker run -it -p 80:8080 ubuntu:20.04 /bin/bash ``` 在这个容器里面,启动上图中的各种Server。 ## 2. Xvfb虚拟屏幕 首先,安装一个叫做 xvfb 的软件。这是一个“虚拟屏幕”,都在内存中模拟的屏幕。见:https://en.wikipedia.org/wiki/Xvfb 安装: ``` apt-get install -y xvfb ``` 然后启动“虚拟屏幕”: ``` Xvfb :0 -screen 0 1920x1080x24 -listen tcp -ac +extension GLX +extension RENDER ``` 其中,1920x1080x24 表示:屏幕大小(分辨率)。 24则是像素深度。 这个屏幕大小,到时候可以根据App的界面效果自己调整。 ## 3. X11vnc服务器 然后,我们安装 x11服务器(因为安装这个有交互,所以之类设置了 无交互模式) ``` export DEBIAN_FRONTEND=noninteractive apt-get install -y x11vnc ``` 然后启动 x11服务器: ``` x11vnc -forever -shared -noipv6 -passwd tsjsdbd ``` 其中标红的password换成你自己喜欢的密码。 ## 4. noVNC服务器 最后,我们通过noVNC服务器,将 VNC翻译为HTML服务, 安装: ``` apt-get install -y novnc ``` 然后启动: ``` websockify --web /usr/share/novnc 8080 localhost:5900 ``` ## 5. 启动带UI的App ``` apt-get install x11-apps DISPLAY=:0.0 xclock ``` 这里的DISPLAY变量的作用,是表示把App的界面,投射到咱们的这个“虚拟屏幕”上。 详细请看我之前的那篇文章。 ## 6. 从浏览器访问 从浏览器,访问我们的容器。地址(因为我们启动容器用来http默认端口80,所以这里URL不用设置端口了。): http://容器ip/vnc.html ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133028850496244.png) 这里填,第3步咱设置的密码。然后可以看到App的界面啦: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133039587406619.png) # 四、Dockerfile 这里为了大家方便,直接提供一个Dockerfile ``` FROM ubuntu:20.04 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get install -y novnc x11vnc xvfb EXPOSE 8080 ENTRYPOINT ["/bin/bash"] ``` 然后写个 start-novnc.sh 脚本: ``` #!/bin/bash set -e #虚拟屏幕 Xvfb :0 -screen 0 1920x1080x24 -listen tcp -ac +extension GLX +extension RENDER > /dev/null 2>&1 & #vnc服务器 x11vnc -forever -shared -noipv6 -passwd tsjsdbd > /dev/null 2>&1 & #novnc websockify --web /usr/share/novnc 8080 localhost:5900 > /dev/null 2>&1 & ``` 最后你启动app的时候,记得带上: ``` DISPLAY==========================================BN =:0.0 your-ui-app ``` 就可以了。
  • [问题求助] docker-ce镜像不可用
    用的这里的命令,无法成功安装docker给出的链接https://repo.huaweicloud.com/docker-ce/linux/centos/7/aarch64/stable/Packages/containerd.io-1.6.4-3.1.el7.aarch64.rpm下没有对应的文件
  • [其他问题] 【mdc产品】【x86交叉编译功能】提供的x86平台可以做成docker容器
    提供的x86平台可以做成docker容器吗?
总条数:479 到第 页
上滑加载中