【问题标题】:creating interactive docker image创建交互式泊坞窗图像
【发布时间】:2018-06-14 06:43:12
【问题描述】:

我是 Docker 新手,需要一些帮助。我想为 c 代码制作一个交互式 docker 图像。我已经为此编写了一个小的 c 代码。下面是我的c代码:

**CODE:** 

#include<stdio.h>
#include<stdlib.h>
int main()
{
  int i,sum=0,n,num[10];
  printf("How many integers do you want to enter? ");
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
     scanf("%d",&num[i]);
     sum+=num[i];
  }
  printf("Total Sum: %d\n",sum);
  printf("---------------------\n\n");
  return 0;
}

输出: 您要输入多少个整数? 3(用户输入)
1 3 5(用户输入)

总和:9

**DockerFile code**
          File: Dockerfile                             

FROM debian:latest
RUN mkdir -p /home/arup123/ExtendedAdd
COPY . /home/arup123/ExtendedAdd
CMD /home/arup123/ExtendedAdd/ExtendedAddition

我的尝试

我认为我们可以在当前 shell 中创建一个类似于 bash shell 的交互式 shell 来获取用户输入,但我收到“分段错误(核心转储)”

docker build -t image1 .
docker run -it --name image2 image1 /bin/bash 
/# 3
bash: 3: command not found
/# 1 2 3
bash: 1: command not found
/# exit
exit
docker commit image2 myuser/myimage:2.1
# docker run e2807f8b1966(image id of image1)
Segmentation fault (core dumped)

请让我知道我哪里出错了,我该如何纠正!
-谢谢

【问题讨论】:

    标签: docker unix debian dockerfile docker-image


    【解决方案1】:

    首先,不要在docker run 结尾加上/bin/bash:这会覆盖您的Dockerfile 中定义的CMD

    如果你已经构建了你的镜像(检查docker images的输出),使用:

    docker run --rm -it --name prg myImage
    

    如果段错误仍然存​​在,则可能是您的 C 代码或其编译存在问题(确保它是使用与 Docker 映像/Dockerfile 中使用的操作系统类似的操作系统编译的。

    【讨论】:

    • docker run --rm -it --name prg myimage 无法在本地找到图像 'myimage:latest' '码头登录'。请参阅“docker run --help”。我遇到了上面的错误!!!
    • @learner 是的,这就是我提到docker images 的原因,以便您在使用docker build --tag myImageName 构建图像时选择给图像起的名称
    • 它的工作是因为 -it 选项,一个分配了 try 的交互式会话,允许你的程序有 stdout 和 stderr。
    • 分配try是什么意思?为什么 CMD 命令会被 /bin/bash 覆盖?还有其他替代方法吗?
    猜你喜欢
    • 2014-03-22
    • 2022-08-13
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    相关资源
    最近更新 更多