2021.07.12 周一 晴 Docker部署中的坑

20 篇文章 0 订阅
12 篇文章 0 订阅

1 端口号的暴露问题、

参考 https://www.runoob.com/docker/docker-container-connection.html

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P(大写) 或 -p (小写) 参数来指定端口映射。
(1)当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。
使用 docker ps 可以看到,本地主机的 49155 被映射到了容器的 5000 端口。此时访问本机的 49155 端口即可访问容器内 web 应用提供的界面。

同样的,可以通过 docker logs 命令来查看应用的信息。

(2)-p(小写)则可以指定要映射的IP和端口,但是在一个指定端口上只可以绑定一个容器。支持的格式有 hostPort:containerPortip:hostPort:containerPort、 ip::containerPort

  • hostPort:containerPort(映射所有接口地址)
    将本地的 5000 端口映射到容器的 5000 端口,可以执行如下命令:
    $ sudo docker run -d -p 5000:5000 training/webapp python app.py 此时默认会绑定本地所有接口上的所有地址。

  • ip:hostPort:containerPort (映射指定地址的指定端口)
    指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1
    $ sudo docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

  • ip::containerPort (映射指定地址的任意端口)
    绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口。
    sudo docker run -d -p 127.0.0.1::5000 training/webapp python app.py
    还可以使用 udp 标记来指定 udp 端口
    $ sudo docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

查看映射端口配置
使用 docker port 来查看当前映射的端口配置,也可以查看到绑定的地址

注意:

  • 容器有自己的内部网络和 ip 地址(使用 docker inspect 可以获取所有的变量,Docker 还可以有一个可变的网络配置。)
  • -p 标记可以多次使用来绑定多个端口
    例如

$ sudo docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py

2 自己包导入不了的问题

如在自己(pycharm)的环境中,因为已经确定了根目录环境 import mymodel 中不存在问题,但在docker 中或者命令行中可能就会存在

执行提示ModuleNotFoundError: No module named 'XXX' 问题

大家可以参考

https://www.cnblogs.com/dreamyu/p/7889959.html

ps:注意的是sys.path.append(rootPath)要放在import XXX 之前 

3 Docker 删除 none 镜像 命令

自己在docker build 没有成功的时候一定要把失败的镜像删除 

docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
docker images|grep none|awk '{print $3 }'|xargs docker rmi

ps: 删除的时候步骤是先停止容器 再删除容器 最后可以删除镜像

4 docekr环境中中文编码的问题

https://www.cnblogs.com/z-belief/p/6148463.html

ENV LANG C.UTF-8

在 10.8.80.239服务器上尝试过ENV LANG zh_CN.UTF-8 每次代码会自动乱码,慎用

5 docker exec 的使用-it操作

https://blog.csdn.net/qq_40081976/article/details/84590119

6 docker镜像导出,tar镜像包可以拷贝到其他机器docker环境中加载

docker save SDK_validation-o SDK_validation.tar

docker镜像加载

docker load -i SDK_validation.tar

7  Docker run 命令

Docker run 命令 | 菜鸟教程 (runoob.com)

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:
  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

  • -d: 后台运行容器,并返回容器ID;

  • -i: 以交互模式运行容器,通常与 -t 同时使用;

  • -P: 随机端口映射,容器内部端口随机映射到主机的端口

  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口

  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • --name="nginx-lb": 为容器指定一个名称;

  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

  • -h "mars": 指定容器的hostname;

  • -e username="ritchie": 设置环境变量;

  • --env-file=[]: 从指定文件读入环境变量;

  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

  • -m :设置容器使用内存最大值;

  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:<name|id> 四种类型;</name|id>

  • --link=[]: 添加链接到另一个容器;

  • --expose=[]: 开放一个端口或一组端口;

  • --volume , -v: 绑定一个卷

8 docker 镜像的构建

Docker Dockerfile | 菜鸟教程 (runoob.com)

docker build -t semantic_similarity:v1.0 .

ps:最后的 . 代表本次执行的上下文路径

FROM:定制的镜像都是基于 FROM 的镜像

RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

shell 格式:

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

exec 格式:

RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

CMD

类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

  • CMD 在docker run 时运行。
  • RUN 是在 docker build。

COPY

复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

  • ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
  • ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

ENV

设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值