• [应用专区] 【Hi-Grid-T2系列】安装APP成功,但是并没有成功启动
    安装APP前后的日志记录如下:打包debian时使用的beyonddc.service如下:想请教一下,是不是service的实现有问题?
  • [容器专区] 【Hi-Grid-T2系列】配置volume时提示不支持:The container does not support volume.
    参考资料文档为边缘计算网关二次开发指南(T2系列).chmlog如下:
  • [容器专区] 【Hi-Grid-T2系列】容器正常start后,进行stop再start时,提示Failed to start container.
    第一次操作时,install-->start是正常的,但是stop后进行start会提示Failed to start container.log如下:将容器卸载后再次安装,start,则不会出现该问题。
  • [应用专区] 【Hi-Grid-T2系列】容器安装APP 提示install app failed.
    日志记录:安装指令:编写APP服务:生成deb包脚本:生成ova包:/data/eciot-ova/system/external/sdk/usr/local/bin/create-ova -t app -d beyonddc.deb -n beyonddc -s beyonddc 50 50 -s dcweb 40 50 -version_short V001 -ar armel -ot debian -ov buster -vendor sanxing
  • [容器专区] 【AR502产品】docker内运行./build_ova.sh报错,无法找到armel.img
    Hi,我在使用./build_ova.sh armel 2.0.0 huawei download unprivileged命令进行LXC容器包制作时,产生了报错如下:create deb file success!usage3:./create_rootfs.sh {armel|arm64} {privileged|unprivileged} {passwd} [custom_dir]cp: cannot stat 'armel-buster-lxc-rootfs.squashfs': No such file or directoryERR: Sorry, i can't find the file: armel.imgmv: cannot stat 'ECarmelunprivileged.ova': No such file or directorymu'qian'wo'shi'yong'de
  • [对接入门] 【AR502产品】build_sdk_base.sh运行报错
    运行环境为VMvare下的Ubuntu18.04及20.04;sourcelist使用清华源/阿里源;apt-get update无异常,且下载docker无异常,docker version为Docker version 23.0.4, build f480fb1 脚本来源为https://support.huawei.com/enterprise/zh/doc/EDOC1100199326下载的chm文件中附带的rar文件但是运行build_sdk_base.sh会出现update部分文件失败。
  • [其他] 在Docker容器中安装中文字体
    在需要操作word的场景中,比如代码生成word合同,导出数据到word模板,word文件转pdf文件等常常需要中文字体,而发布到docker环境的程序默认没有中文字体,就需要打包镜像的时候手动安装自己,下面就以一个jar打包成镜像的示例,Dockerfile如下FROM openjdk:8WORKDIR /build# 安装字体COPY simhei.ttf /usr/share/fonts/my-fonts/simhei.ttfCOPY simsun.ttc /usr/share/fonts/my-fonts/simsun.ttcRUN yum install mkfontscale -yRUN yum install fontconfig -yRUN mkfontscaleRUN mkfontdirRUN fc-cache -fv#拷贝其他文件COPY . .CMD java -jar api-0.0.1-SNAPSHOT.jar上面的yum命令是基于centos7的,如果版本不对需要调整版本号。然后就可以docker build后再run了。
  • 通过docker制作jar镜像并运行
    docker的安装脚本:   # 更新yum源为阿里源   wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo   yum install -y yum-utils device-mapper-persistent-data lvm2   # 华为源   yum-config-manager --add-repo https://sandbox-expriment-files.obs.cn-north-1.myhuaweicloud.com:443/use-framework-upgrade/docker-ce.repo   # 阿里源   yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   yum install docker-ce   systemctl start docker  systemctl enable docker   docker version      构建docker镜像     在centos系统下创建目录 /root/mydocker     将项目jar包复制到/root/mydocker内  创建Dockerfile文件,文件内容:  FROM openjdk:8  WORKDIR /build  COPY . .  CMD java -jar test.jar    4. 将Dockerfile文件复制到/root/mydocker文件夹内   5. 在/root路径下执行命令:  docker build mydocker -t mydocker:v1  6. 至此镜像制作完毕,可以通过命令运行  docker run -d -p 8081:8080 mydocker:v1   7. 将打包好的镜像导出到服务器上   docker save 999c20aee5da > /root/mydocker.tar mydocker:latest   999c20aee5da为镜像ID  8. 加载服务器上镜像文件  docker load < /root/mydocker.tar  9. 停止,删除,删除镜像,重新build,run脚本,rebuild.sh  docker stop myapi  docker rm myapi  docker rmi myapi:latest  docker build /www/myapi -t myapi:latest  docker run -d --name=myapi -p 80:80 myapi:latest  **************************************************************************************  docker使用  1.centos下安装docker  CentOS Docker 安装 | 菜鸟教程  2.常用命令:  centos下启动docker服务:systemctl start docker  查看本地镜像:docker images  删除本地镜像:docker  rmi  [imageId]  下载一个镜像:docker pull  [imageName]  运行一个容器:docker run  -d:后台运行  -p:指定端口映射  -it:交互式运行,配合/bin/bash进行命令行输入  -v:数据卷指定,用户文件路径映射  例如:   docker run -d -p 8081:8080 -v /root/myfiles:/root/myfiles tomcat  查看运行中的容器:docker ps  查看所有容器:docker ps -a  删除容器:docker rm [containerId]  停止容器:docker stop [containerId]  启动/重启容器:docker start/restart [containerId]  以交互式进入容器内部:Docker exec -it [containerId] /bin/bash  查看容器日志:Docker logs [containerId]  查看数据卷列表:docker volume ls  删除数据卷:docker volume rm [VolumeName]  主机和容器之间复制文件:      从主机复制到容器  sudo docker cp host_path containerID:container_path      从容器复制到主机  sudo docker cp containerID:container_path host_path  
  • [技术干货] Docker 下MySQL数据库的备份和恢复的操作方法【转】
    docker最近迷恋使用doker容器,在docker容器进行部署MySQL,以前针对容器的安全性一直存在怀疑的态度,不过如果能够通过容器也能数据库备份问题,就这样开始docker容器备份备份和恢复:第一种方式12345678910#全部备份[root@localhost home]# docker  exec  c_mysql sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /home/movice202302.sql#备份数据转移[root@localhost home]# docker cp /home/movice202302.sql salve-mysql:/var # salve-mysql 是容器 #全部恢复root@6faa12ee2d96:/# mysql -uroot -p123456 < /var/movice202302.sql#查看恢复数据库情况:mysql -uroot -p123456 -e 'drop database SCHOOL;'mysql -uroot -p123456-e 'SHOW DATABASES;'恢复:导出数据库的表结构和表数据mysqldump -uroot -pdbpasswd db_name >db.sql;12[root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump  -uroot -p123456 movice_fuli' > /home/movie0216.sqlWarning: Using a password on the command line interface can be insecure.123456789101112131415导出数据库表数据mysqldump -uroot -pdbpasswd -t db_name >db.sql;root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump  -uroot -p123456 -t movice_fuli' > /home/movie.sql导出数据库表结构mysqldump -uroot -pdbpasswd -d db_name >db.sql;root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump  -uroot -p123456 -d movice_fuli' > /home/movie.sql导出数据库中某个表的表结构mysqldump -uroot -pdbpasswd -d db_name table_name >db.sqlroot@localhost home]# docker exec c_mysql sh -c 'exec mysqldump  -uroot -p123456 -d movice_fuli user' > /home/movie.sql导出数据库中某个表的表结构和表数据mysqldump -uroot -pdbpasswd db_name table_name >db.sql;root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump  -uroot -p123456  movice_fuli user' > /home/movie.sql自动化备份mysql1 创建目录/usr/data用于存放mysql的数据存放12345678910111213141516171819root@localhost ~]# cd /usr[root@localhost usr]# lsbin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp[root@localhost usr]# mkdir data[root@localhost usr]# lsbin  data  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp[root@localhost usr]# cd data[root@localhost data]# ls [root@localhost data]# touch back_clean.sh [root@localhost data]# touch backup .sh[root@localhost data]# mkdir logs[root@localhost data]# mkdir mysql_bak[root@localhost data]# lsback_clean.sh  backup  logs  mysql_bak[root@localhost data]# rm backuprm:是否删除普通空文件 "backup"?y[root@localhost data]# touch backup.sh[root@localhost data]# lsback_clean.sh  backup.sh  logs  mysql_bak2 编辑 备份脚本和清除大于给定期限的备份数据backup.sh,back_clearn.sh1234567891011121314151617181920212223242526vi backup.shBACKUP_ROOT=/usr/data/BACKUP_FILEDIR=$BACKUP_ROOT/mysql_bak#当前日期DATE=$(date +%Y%m%d)# 获取容器mysqlid=docker ps  -aqf "name=c_mysql"#查询所有数据库DATABASES=$(docker exec -i ${mysqlid}  mysql  -uroot -p123456 -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql")#循环数据库进行备份for db in $DATABASESdoechoif [[ "${db}" =~ "+" ]] || [[ "${db}" =~ "|" ]];thenecho "jump over ${db}"elseecho ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN----------docker exec -i ${mysqlid}  mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gzecho ${db}echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE----------echofidoneecho "备份完成"1234vi back_clear.shecho ----------CLEAN BEGIN----------find /usr/data/mysql_bak/ -mtime +7 -name "*.gz" -exec rm -rf {} \;echo ----------CLEAN COMPLETE---------设置定时任务利用Linux crontab 进行设置定时任务查看定时任务crotab -l修改定时任务crontab -e12345#每天02:00自动清理大于7天的mysql备份00 2 * * * /usr/data/backup_clean.sh > /usr/data/logs/backup_full_clean.log 2>&1#每天11:00自动备份mysql00 11 * * * /usr/data/backup.sh > /usr/data/logs/backup.log 2>&1到此这篇关于Docker 下MySQL数据库的备份和恢复的文章就介绍到这了转载自https://www.jb51.net/article/275649.htm
  • [技术干货] docker-compose统一管理多个容器使用详解【转】
    在我们使用Docker时,如果需要运行多个容器,在没有Docker-compose之前,你可能需要一个个的定义和启动。docker-compose诞生之后,你只需要把这些容器、依赖关系、端口映射等配置在一个yaml文件中即可,大大提升了管理效率。今天就以一个Python项目来说说Docker-compose的使用步骤。Docker-compose目录树flask项目中要用到mysql,因此我们准备2个容器:mysql镜像、flask项目镜像。flask代码目录如下:12345678910.├── docker-compose.yml├── flask│   ├── Dockerfile│   ├── __init__.py│   ├── gunicorn_conf.py│   ├── manage.py│   ├── requirements.txt│   └── settings.py└── mysqlflask目录下文件首先来编写MySQL连接文件settings.py:1234567import pymysqldb = pymysql.connect(    host='mysql',    port=3306,    user='root',    password='root123456')再编写代码文件manage.py,代码很简单,就是开启一个flask服务,需要用到上述的mysql服务:1234567891011121314151617181920from flask import Flaskfrom settings import dbapp = Flask(__name__)def mysql_test():    cursor = db.cursor()    sql = "show databases"    cursor.execute(sql)    res = cursor.fetchall()    cursor.close()    db.close()    return res @app.route('/')def index():    res = mysql_test()    re_list = []    for row in res:        re_list.append(row[0])    return "res: {}".format(re_list)if __name__ == '__main__':    app.run()进程管理方面,我们使用gunicorn来管理服务,因此编写gunicorn配置文件gunicorn_conf.py:123worker = 4worker_class = "gevent"bind = "0.0.0.0:5000"接着,我们来编写Dockerfile:12345FROM python:3.7-slimCOPY . /homeWORKDIR /homeRUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simpleCMD gunicorn -c gunicorn_conf.py manage:app然后,再编写一下flask项目依赖文件requirements.txt:12345Flask==2.0.3gunicorn==20.1.0gevent==21.12.0PyMySQL==1.0.2cryptography==39.0.0docker-compose.yml文件编写编写docker-compose.yml,我们要描述应用的构成(一个web服务器和一个数据库)、使用的Docker镜像、镜像间的连接、挂载到容器的数据卷、服务开放的端口。1234567891011121314151617181920212223242526272829version: '3'services:  mysql:    image: mysql:latest    restart: always    networks:   # 配置网络      - diy_net    expose:      - 3310    ports:      - "3310:3306"    environment:   # 环境变量(可防止泄露不必要的数据)      - MYSQL_ROOT_PASSWORD=root123456  flask:    build: ./flask    depends_on:  # 依赖于mysql容器,启动时会先启动mysql      - mysql    networks:   # 配置网络      - diy_net    environment:       - MYSQL_USER=root      - MYSQL_PASSWORD=root123456      - MYSQL_DB=docker_db    ports:      - "5000:5000"networks:  # 网络设置  diy_net:    name: diy_net    external: true  # 表示已有的网络备注: networks的配置是为了让flask应用和mysql应用同处在一个网络,这样才能保证容器间的连通性。 当然保证容器间的连通性,还有其他方式,如用--link配置。用networks配置起来更加方便。代码完成后,开启服务:1docker-compose up -d服务正常开启,来测试一下两个容器的连通性。进入flask容器docker-compose exec flask bashping一下mysql容器:ping -c 3 mysql,显示信息如下:12345678# ping -c 3 mysqlPING mysql (172.18.0.3) 56(84) bytes of data.64 bytes from test-mysql-1.diy_net (172.18.0.3): icmp_seq=1 ttl=64 time=0.717 ms64 bytes from test-mysql-1.diy_net (172.18.0.3): icmp_seq=2 ttl=64 time=0.432 ms64 bytes from test-mysql-1.diy_net (172.18.0.3): icmp_seq=3 ttl=64 time=0.376 ms--- mysql ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2005msrtt min/avg/max/mdev = 0.376/0.508/0.717说明容器间互联成功。整个项目就运行起来了。转载自https://www.jb51.net/article/275903.htm
  • [技术干货] 云原生Docker容器自定义DNS解析【转】
    描述在特定的情况下,或者在网络策略特殊定义下,需要自定义dns进行域名访问,在宿主机上配置了域名解析,对于docker容器无效。对于局域网内的域名解析,Docker 需要到 Docker 容器中配置 hosts 文件。实现方式docker-compose配置【推荐】通过增加 extra_hosts 属性 进行host配置12345678910111213141516version: '2'services:  # 指定服务名称  portainer-docker-compose:    image: portainer/portainer    container_name: portainer    volumes:      - /etc/localtime:/etc/localtime    ports:      - 29999:8080    environment:      spring.profiles.active: dev    extra_hosts:      s3-qos.qiniu-solutions.com: 10.12.32.4      demos.s3-qos.iot-st-armtest.qiniu-solutions.com: 10.12.32.4    restart: always进入容器内部修改进入容器1docker exec -it 0485008fc3e5 /bin/sh修改容器内的hosts1cat /etc/hostsdocker run 命令的时候添加进行dns映射:s3-qos.qiniu-solutions.com:10.12.32.412345docker run -d -p 9000:9000 \--restart=always \--add-host s3-qos.qiniu-solutions.com:10.12.32.4 \-v /var/run/docker.sock:/var/run/docker.sock \--name portainer portainer/portainer官方文档:cid:link_2docker build构建镜像时添加1docker build --add-host=docker:10.180.0.1 .官方文档:cid:link_1结尾如果是单机推荐大家采用docker-compose的方式进行编排【开发测试环境】,生产环境可以采用k8s进行编排。官方文档:cid:link_0转载自https://www.jb51.net/article/276037.htm
  • [问题求助] 在华为云openEuler安装docker ce出错
     华为云openEuler 20.03相当于centos 7还是8?如何安装docker ce 19.3.8或以上版本 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo  修改Docker官方源的版本号 默认识别到的是“20.03LTS_SP3”,应该改成8,也就是CentOS 8。 sed -i 's/\$releasever/8/g' /etc/yum.repos.d/docker-ce.repo 注:如果不执行这一步,会出错: yum makecache Docker CE Stable - aarch64                                                                                              259  B/s | 391  B     00:01 Error: Failed to download metadata for repo 'docker-ce-stable': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried  刷新包缓存 dnf clean all dnf makecache  dnf -y install docker-ce  提示: Last metadata expiration check: 0:03:11 ago on Mon 07 Nov 2022 02:07:21 PM CST. Error:  Problem: cannot install the best candidate for the job   - nothing provides container-selinux >= 2:2.74 needed by docker-ce-3:20.10.21-3.el8.aarch64 (try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages) 
  • [技术干货] 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
总条数:476 到第
上滑加载中