docker运行的java无法请求到别的服务器怎么办

docker运行的java无法请求到别的服务器怎么办,第1张

docker运行的java无法请求到别的服务器怎么办
这个其实应该非常少碰到,我碰到了算是巧合,因为默认的系统参数其实是不会出现这种情况的。
两种可能的原因会造成Docker容器内无法访问外部网络:
容器使用了桥接网络但防火墙屏蔽了通信
/etc/sysctlconf系统配置参数问题
我碰到的情况属于第二种,配置参数问题,修正方法:
编辑/etc/sysctlconf
将其中的netipv4ip_forward=0改成netipv4ip_forward=1。
重载配置,之后Docker的容器即可正常通信,如果不行,restart下容器。
sysctl -p

Docker 是一个开源的 应用容器引擎 ,让 开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化 。容器是完全使用沙箱机制,相互之间不会有任何接口。

由于本地开发好的程序往往都需要部署到服务器上进行运行,这就导致了程序需要运行在不同的环境上,这通常是一个令人头痛的事情。在过去,开发团队需要清楚的告诉运维部署团队,其所使用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。

于是乎, 虚拟化 技术应运而生。开发团队将开发好的程序在虚拟机上运行,这样就能解决运维的问题。但是由于虚拟机技术过重的特性导致了其 资源占用多、冗余步骤多以及启动慢的缺陷 。而这个时候 一种新的虚拟化技术搭配上容器化的思想 的产品便出现了,而它就是Docker。

下图是虚拟机技术和容器化技术架构的对比。我们可以得出以下总结:

[上传失败(image-efadd2-1643314980201)]
]( >运行容器

sudo docker run -it -v /home/lcj/test_docker:/home/lcj/test_docker tensorflow/tensorflow:1131-gpu-py3

参数:

-d 后台运行并返回容器ID,如 -itd

-e 设置环境变量,如 -e NVIDIA_VISIBLE_DEVICE=0 使用编号为 0 的GPU

-i 打开 STDIN,用于控制台交互,通常跟 -t 一起使用

--net 容器网络设置,如 --net my_network,或者 --net=contianer:NAME_or_ID,使用其他容器的网络,共享 IP 和 PORT 等资源

--restart 指定容器停止后的启动的策略,如 --restart=always

--runtime=nvidia 使用 nvidia 模式运行,跟 -e 一起使用,可以在容器里使用 GPU

-t 为容器重新分配一个伪输入终端,通常与 -i 一起使用

-v 给容器挂载存储卷,挂载到容器的某个目录,如 -v /home/lcj/test_docker:/home/lcj/test_docker

-w 指定容器的工作目录
停止容器

docker stop 容器ID

或者 docker stop `docker ps -a -q` 停止所有容器
重启容器

docker restart 容器ID
进入一个运行中的容器

docker attach 容器ID
保存容器

docker save myimage | bzip2 -9 -c > /home/lcj/savetarbz2
加载容器

bzip2 -d -c < /home/lcj/savetarbz2 | docker load
杀掉运行中的容器

docker kill -s KILL 容器ID

-s:向容器中发送一个信号
docker rm 命令

参数:

-f :通过 SIGKILL 强制删除一个容器,如 docker rm -f a

-l:移除容器间的网络连接,而非容器本身,如 docker rm -l b,其中 b 为连接名,而非容器名

-v:删除与容器关联的卷
docker create :创建一个容器但不运行它,语法同 docker run
docker ps

-a:显示所有的容器,包括未运行的

-f:根据条件过滤显示的内容

-l:显示最近创建的容器

-n:列出最近创建的 n 个容器

-q:静默模式,只显示容器 ID

列出所有创建的容器 ID

docker ps -a -q

停止所有容器 ID

docker stop  `docker ps -a -q`
获取容器/镜像的元数据

docker inspect 容器/镜像名
docker top :查看容器中的进程信息

docker top a(a 是容器)
docker attach :链接到正在运行的容器(该容器必须正在运行)

docker attach a (a 是容器)
docker events :从服务器获取实时事件

-f:根据条件过滤事件

--since:从指定的时间戳后显示所有的事件

--until:流水时间显示到指定的时间为止

显示docker 2016年7月1日后的所有事件

docker events -since="1467302400"

显示docker 镜像为mysql:56 2016年7月1日后的相关事件

docker events -f "image"="mysql:56" --since="1467302400"

备注:如果指定的时间是到秒级的,需要将时间转成时间戳。如果时间为日期的话,可以直接使用,如--since="2016-07-01"
docker export :将文件系统作为一个 tar 压缩文件导出到 STDOUT
docker port :列出指定的容器端口的映射,或者查找将 PRIVATE_PORT NAT 到面向公众的端口

docker port a(a 为容器名)
docker commit : 从容器创建一个新的镜像

-a:提交的镜像作者

-c:使用 Dockerfile 文件来创建镜像

-m:提交时说明的文字

-p:在 commit 时暂停容器

docker commit -a 'lcj' -m 'has update' 容器 ID 镜像名
docker cp :用于容器与主机之间的数据拷贝

将主机的 test_docker 目录拷贝到容器 /home/lcj 目录下

docker cp /home/lcj/test_docker 容器 ID:/home/lcj/

将容器 /home/lcj 目录拷贝到主机的 test_docker 目录下

docker cp 容器 ID:/home/lcj/ /home/lcj/test_docker
docker login/logout :登录或退出一个 Docker 镜像仓库,如果未指定镜像仓库地址,则默认为 官方 Docker Hub

docker login -u 用户名 -p 密码

docker logout
docker pull :从镜像仓库中拉取或者更新指定镜像

docker pull java
docker push :将本地的镜像上传到镜像仓库,需先登录到镜像仓库

docker push myapache:v1
docker search :从 Docker Hub 查找镜像

--automated,只列出 automated build(自动生成) 类型的镜像

--no-trunc,显示完整的镜像描述

-s:列出收藏数不少于指定值的镜像

从Docker Hub查找所有镜像名包含java,并且收藏数大于10的镜像

docker search -s 10 java
docker images :列出本地所有的镜像

-a:列出本地所有的镜像(含中间映像层,默认情况下,过滤中间映像层)

-q:只显示镜像 ID

docker images 或 docker images ubuntu,列出本地所有镜像或本地仓库名为 ubuntu 的所有的镜像
docker  rmi :删除一个或多个镜像

-f:强制移除

--no_prune:不移除该镜像的过程镜像,默认移除

强制删除本地镜像w3cschool/ubuntu:v4

docker rmi -f w3cschool/ubuntu:v4
docker tag :标记本地镜像,将其归入到某一个仓库

将镜像ubuntu:1510标记为 w3cschool/ubuntu:v3 镜像

docker tag ubuntu:1510 w3cschool/ubuntu:v3
docker build:使用 Dockerfile 文件创建镜像

使用当前目录的Dockerfile创建镜像

docker build -t w3cscholl/ubuntu:v3 (不要漏掉最后的 符号)

使用URL  githubcom/creack/docker-firefox  的 Dockerfile 创建镜像

docker build githubcom/creack/docker-firefox
docker history :查看指定镜像的创建历史
docker save :将指定镜像保存成 tar 压缩文件

-o:输出到文件

docker save -o my_ubuntu_v3tar w3cschool/ubuntu:v3
docker import:从压缩文件中创建镜像

-c:应用 docker 指令创建镜像

-m:提交时的说明文字

从镜像归档文件my_ubuntu_v3tar创建镜像,命名为w3cschool/ubuntu:v4

docker import my_buntu_v3tar w3cschool/ubuntu:v4

docker是一个开源的应用容器引擎。

让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

众所周知,一个Java应用war包或者jar包启动成功,有能够对外提供服务的能力,能正常访问页面,做 *** 作,需要部署到一台有tomcat的linux环境中,没有容器技术前的上线流程通常出现这样的或那样的问题。

docker的架构

Docker使用客户端服务器架构模式,使用远程API来管理和创建Docker容器,Docker容器通过Docker镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类,Docker daemon一般在宿主主机后台运行,等待接收来自客户端的消息。Docker客户端则为用户提供一系列可执行命令,用户用这些命令实现跟Docker daemon交互。

Docker daemon作为服务端接受来自客户的请求,并处理这些请求创建、运行、分发容器。 客户端和服务端既可以运行在一个机器上,也可通过socket或者RESTfulAPI来进行通信。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10941261.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存