DockerFile遇到的坑

CMD 命令的坑

dockerfile 中的 CMD 命令在docker run -it 不会执行 CMD 命令。

go 复制代码
FROM golang
WORKDIR /
COPY . ./All-in-one
CMD ["/bin/sh","-c","touch /kkk.txt && ls -la"]
RUN echo 'alias ll="ls -la"' > ~/.bashrc
  • (不会执行CMD)docker run -it 不会生成kkk.txt文件
  • (会执行CMD)执行docker run -d imageName,会直接结束,通过docker ps -a 查看CMD是已经执行了。
  • (会执行CMD)执行docker run imageName,再启动新终端执行docker exec -it查看CMD命令执行结构

使用 docker run -it 命令启动容器时,默认情况下会覆盖 Dockerfile 中定义的 CMD 指令。

当您在运行 docker run 命令时提供了额外的命令,Docker 不会执行 Dockerfile 中的 CMD 指令,而是执行您提供的命令

docker run,golang程序在宿主机上可以运行,在容器中不可以运行

在尝试用docker的alpine镜像运行从golang镜像中编译出来的可执行文件时出现如下的错误

go 复制代码
... "no such file or directory"

在 Go 1.5 版本之后,Go 默认开启了 CGo。CGo 是 Go 语言的一个特性,它允许你在 Go 代码中调用 C 语言的函数。CGo 允许 Go 代码与 C 语言代码直接交互,这为使用 C 语言编写的库提供了良好的兼容性。

禁用CGO_ENABLED=0,重新编译即可

go 复制代码
export CGO_ENABLED=0

原理参考:https://blog.csdn.net/tianyi520jx/article/details/127164636

相关推荐
zopple3 小时前
常见的 Spring 项目目录结构
java·后端·spring
cjy0001115 小时前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
小江的记录本6 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji34166 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
程序员cxuan6 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
wuyikeer7 小时前
Spring Framework 中文官方文档
java·后端·spring
Victor3567 小时前
MongoDB(61)如何避免大文档带来的性能问题?
后端
Victor3568 小时前
MongoDB(62)如何避免锁定问题?
后端
wuyikeer8 小时前
Spring BOOT 启动参数
java·spring boot·后端
子木HAPPY阳VIP9 小时前
Ubuntu 22.04 VMware 设置固定IP配置
人工智能·后端·目标检测·机器学习·目标跟踪