Команда запуска Docker нет такого файла или каталога

Я написал приложение на C++, используя clion, cmake для компиляции и запуска проекта. Проект отлично работал при запуске с терминала или clion.

Мне нужно создать образ Docker, чтобы развернуть проект, и я впервые использую Docker. Итак, я создал DockerFile

FROM gcc:5.4

# remove cmake

RUN apt-get update \
 && apt-get remove --purge -y \
    cmake \
 && apt-get autoremove -y && apt-get autoclean -y \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*

# build latest cmake

ARG cmake_sources = "https://cmake.org/files/v3.7/cmake-3.7.0.tar.gz"
LABEL cmake-version=3.7.0

RUN cd /opt \
 && mkdir src \
 && curl -s $cmake_sources | tar -xz --strip-components=1 -C src \
 && cd src \
 && ./bootstrap \
 && make -j8 \
 && make install \
 && cd .. \
&& rm -rf src
RUN pwd
WORKDIR /home/mohd/project/MaggotProxyTest
COPY . /home/mohd/project/MaggotProxyTest
RUN apt-get update && apt-get install -y tree
RUN tree -x
RUN pwd
#RUN cmake .
#RUN make
RUN cmake -H. -Bbuild
RUN cmake --build build -- -j3
RUN tree -x
RUN stat /home/mohd/project/MaggotProxyTest/build/CMakeFiles/3.7.0/CompilerIdCXX/a.out
RUN chmod +x /home/mohd/project/MaggotProxyTest/build/CMakeFiles/3.7.0/CompilerIdCXX/a.out
CMD ["./home/mohd/project/MaggotProxyTest/build/CMakeFiles/3.7.0/CompilerIdCXX/a.out"]

Затем я создаю образ, используя

sudo docker build -t my_app .

И он выполняет все шаги правильно и компилирует проект, как показано на терминале.

Журнал сборки:

sudo docker build -t app_2 .
Sending build context to Docker daemon  371.2kB
Step 1/17 : FROM gcc:5.4
 ---> b87db7824271
Step 2/17 : RUN apt-get update  && apt-get remove --purge -y     cmake  && apt-get autoremove -y && apt-get autoclean -y  && apt-get clean  && rm -rf /var/lib/apt/lists/*
 ---> Using cache
 ---> 0c23ca9008a7
Step 3/17 : ARG cmake_sources = "https://cmake.org/files/v3.7/cmake-3.7.0.tar.gz"
 ---> Using cache
 ---> df7eca2dfdec
Step 4/17 : LABEL cmake-version=3.7.0
 ---> Using cache
 ---> 659f8e671fc0
Step 5/17 : RUN cd /opt  && mkdir src  && curl -s $cmake_sources | tar -xz --strip-components=1 -C src  && cd src  && ./bootstrap  && make -j8  && make install  && cd .. && rm -rf src
 ---> Using cache
 ---> e9926d53c476
Step 6/17 : RUN pwd
 ---> Using cache
 ---> eed6b41de375
Step 7/17 : WORKDIR /home/mohd/project/MaggotProxyTest
 ---> Using cache
 ---> f1c50d7563ae
Step 8/17 : COPY . /home/mohd/project/MaggotProxyTest
 ---> ab3cadd4f213
Step 9/17 : RUN apt-get update && apt-get install -y tree
 ---> Running in c633632b810f
Get:1 http://security.debian.org jessie/updates InRelease [94.4 kB]
Ign http://deb.debian.org jessie InRelease
Get:2 http://security.debian.org jessie/updates/main amd64 Packages [646 kB]
Get:3 http://deb.debian.org jessie-updates InRelease [145 kB]
Get:4 http://deb.debian.org jessie Release.gpg [2434 B]
Get:5 http://deb.debian.org jessie Release [148 kB]
Get:6 http://deb.debian.org jessie-updates/main amd64 Packages [23.1 kB]
Get:7 http://deb.debian.org jessie/main amd64 Packages [9064 kB]
Fetched 10.1 MB in 17s (578 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
  tree
0 upgraded, 1 newly installed, 0 to remove and 88 not upgraded.
Need to get 45.9 kB of archives.
After this operation, 102 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian/ jessie/main tree amd64 1.7.0-3 [45.9 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 45.9 kB in 3s (15.2 kB/s)
Selecting previously unselected package tree.
(Reading database ... 21224 files and directories currently installed.)
Preparing to unpack .../tree_1.7.0-3_amd64.deb ...
Unpacking tree (1.7.0-3) ...
Setting up tree (1.7.0-3) ...
Removing intermediate container c633632b810f
 ---> b8ee14ee0355
Step 10/17 : RUN tree -x
 ---> Running in 86327f018039
.
|-- AdvertisementServer.cpp
|-- AdvertisementServer.h
|-- ArrayQueue.h
|-- CMakeLists.txt
|-- Channel.cpp
|-- Channel.h
|-- ControlSession.cpp
|-- ControlSession.h
|-- Defines.h
|-- DeviceQoSManager.cpp
|-- DeviceQoSManager.h
|-- Dockerfile
|-- GlobalChannel.cpp
|-- GlobalChannel.h
|-- MaggotChannel.cpp
|-- MaggotChannel.h
|-- MaggotGarbageCollector.cpp
|-- MaggotGarbageCollector.h
|-- MaggotPacketQueue.cpp
|-- MaggotPacketQueue.h
|-- MaggotScheduler.cpp
|-- MaggotScheduler.h
|-- MaggotSender.cpp
|-- MaggotSender.h
|-- MaggotSession.cpp
|-- MaggotSession.h
|-- MaggotTcpPacket.cpp
|-- MaggotTcpPacket.h
|-- MaggotUdpChannel.cpp
|-- MaggotUdpChannel.h
|-- MainScheduler.cpp
|-- MainScheduler.h
|-- Makefile
|-- MptcpSession.cpp
|-- MptcpSession.h
|-- OutOfOrderQueue.cpp
|-- OutOfOrderQueue.h
|-- Packets.h
|-- Profiler.cpp
|-- Profiler.h
|-- ProxySocket.cpp
|-- ProxySocket.h
|-- RateCapped.h
|-- Receiver.cpp
|-- Receiver.h
|-- Reliable.h
|-- ReorderingQueue.cpp
|-- ReorderingQueue.h
|-- Retransmitter.cpp
|-- Retransmitter.h
|-- Running
|-- Safe_Queue.h
|-- Schedulable.h
|-- Session.cpp
|-- Session.h
|-- SessionKey.cpp
|-- SessionKey.h
|-- SharedLargeBufferPool.cpp
|-- SharedLargeBufferPool.h
|-- SharedPool.h
|-- TODO.txt
|-- TcpScheduler.cpp
|-- TcpScheduler.h
|-- TcpSession.cpp
|-- TcpSession.h
|-- TimerEventManager.cpp
|-- TimerEventManager.h
|-- UdpScheduler.cpp
|-- UdpScheduler.h
|-- UdpSession.cpp
|-- UdpSession.h
|-- Using
|-- Util.cpp
|-- Util.h
|-- VpnManager.cpp
|-- VpnManager.h
|-- b87db7824271
|-- cmake_install.cmake
|-- df7eca2dfdec
|-- e3255b76c200
|-- empty.c
|-- log.txt
|-- log.txt~
|-- rateCap
|-- second-
|-- sniffer.c
`-- socketOpt.c

0 directories, 87 files
Removing intermediate container 86327f018039
 ---> 906c6fc16d91
Step 11/17 : RUN pwd
 ---> Running in 1a98be53a294
/home/mohd/project/MaggotProxyTest
Removing intermediate container 1a98be53a294
 ---> 6929705f2df9
Step 12/17 : RUN cmake -H. -Bbuild
 ---> Running in b9ed7275783d
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/local/bin/c++
-- Check for working CXX compiler: /usr/local/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mohd/project/MaggotProxyTest/build
Removing intermediate container b9ed7275783d
 ---> 39cf841de150
Step 13/17 : RUN cmake --build build -- -j3
 ---> Running in 2f0cc83e7dfa
Scanning dependencies of target MaggotProxy
[ 10%] Building CXX object CMakeFiles/MaggotProxy.dir/Util.cpp.o
[ 10%] Building CXX object CMakeFiles/MaggotProxy.dir/ProxySocket.cpp.o
[ 10%] Building CXX object CMakeFiles/MaggotProxy.dir/VpnManager.cpp.o
[ 13%] Building CXX object CMakeFiles/MaggotProxy.dir/UdpSession.cpp.o
[ 16%] Building CXX object CMakeFiles/MaggotProxy.dir/UdpScheduler.cpp.o
[ 20%] Building CXX object CMakeFiles/MaggotProxy.dir/TcpSession.cpp.o
[ 23%] Building CXX object CMakeFiles/MaggotProxy.dir/TcpScheduler.cpp.o
[ 26%] Building CXX object CMakeFiles/MaggotProxy.dir/SessionKey.cpp.o
[ 30%] Building CXX object CMakeFiles/MaggotProxy.dir/Session.cpp.o
[ 33%] Building CXX object CMakeFiles/MaggotProxy.dir/Receiver.cpp.o
[ 36%] Building CXX object CMakeFiles/MaggotProxy.dir/MptcpSession.cpp.o
[ 40%] Building CXX object CMakeFiles/MaggotProxy.dir/MainScheduler.cpp.o
[ 43%] Building CXX object CMakeFiles/MaggotProxy.dir/MaggotSession.cpp.o
[ 46%] Building CXX object CMakeFiles/MaggotProxy.dir/MaggotScheduler.cpp.o
[ 50%] Building CXX object CMakeFiles/MaggotProxy.dir/GlobalChannel.cpp.o
[ 53%] Building CXX object CMakeFiles/MaggotProxy.dir/Channel.cpp.o
[ 56%] Building CXX object CMakeFiles/MaggotProxy.dir/MaggotChannel.cpp.o
[ 60%] Building CXX object CMakeFiles/MaggotProxy.dir/SharedLargeBufferPool.cpp.o
[ 63%] Building CXX object CMakeFiles/MaggotProxy.dir/MaggotTcpPacket.cpp.o
[ 66%] Building CXX object CMakeFiles/MaggotProxy.dir/TimerEventManager.cpp.o
[ 70%] Building CXX object CMakeFiles/MaggotProxy.dir/OutOfOrderQueue.cpp.o
[ 73%] Building CXX object CMakeFiles/MaggotProxy.dir/MaggotPacketQueue.cpp.o
[ 76%] Building CXX object CMakeFiles/MaggotProxy.dir/Retransmitter.cpp.o
[ 80%] Building CXX object CMakeFiles/MaggotProxy.dir/MaggotUdpChannel.cpp.o
[ 83%] Building CXX object CMakeFiles/MaggotProxy.dir/ControlSession.cpp.o
[ 86%] Building CXX object CMakeFiles/MaggotProxy.dir/AdvertisementServer.cpp.o
[ 90%] Building CXX object CMakeFiles/MaggotProxy.dir/MaggotSender.cpp.o
[ 93%] Building CXX object CMakeFiles/MaggotProxy.dir/ReorderingQueue.cpp.o
[ 96%] Building CXX object CMakeFiles/MaggotProxy.dir/MaggotGarbageCollector.cpp.o
[100%] Linking CXX executable MaggotProxy
[100%] Built target MaggotProxy
Removing intermediate container 2f0cc83e7dfa
 ---> d1bb3504b194
Step 14/17 : RUN tree -x
 ---> Running in fec09156925b
.
|-- AdvertisementServer.cpp
|-- AdvertisementServer.h
|-- ArrayQueue.h
|-- CMakeLists.txt
|-- Channel.cpp
|-- Channel.h
|-- ControlSession.cpp
|-- ControlSession.h
|-- Defines.h
|-- DeviceQoSManager.cpp
|-- DeviceQoSManager.h
|-- Dockerfile
|-- GlobalChannel.cpp
|-- GlobalChannel.h
|-- MaggotChannel.cpp
|-- MaggotChannel.h
|-- MaggotGarbageCollector.cpp
|-- MaggotGarbageCollector.h
|-- MaggotPacketQueue.cpp
|-- MaggotPacketQueue.h
|-- MaggotScheduler.cpp
|-- MaggotScheduler.h
|-- MaggotSender.cpp
|-- MaggotSender.h
|-- MaggotSession.cpp
|-- MaggotSession.h
|-- MaggotTcpPacket.cpp
|-- MaggotTcpPacket.h
|-- MaggotUdpChannel.cpp
|-- MaggotUdpChannel.h
|-- MainScheduler.cpp
|-- MainScheduler.h
|-- Makefile
|-- MptcpSession.cpp
|-- MptcpSession.h
|-- OutOfOrderQueue.cpp
|-- OutOfOrderQueue.h
|-- Packets.h
|-- Profiler.cpp
|-- Profiler.h
|-- ProxySocket.cpp
|-- ProxySocket.h
|-- RateCapped.h
|-- Receiver.cpp
|-- Receiver.h
|-- Reliable.h
|-- ReorderingQueue.cpp
|-- ReorderingQueue.h
|-- Retransmitter.cpp
|-- Retransmitter.h
|-- Running
|-- Safe_Queue.h
|-- Schedulable.h
|-- Session.cpp
|-- Session.h
|-- SessionKey.cpp
|-- SessionKey.h
|-- SharedLargeBufferPool.cpp
|-- SharedLargeBufferPool.h
|-- SharedPool.h
|-- TODO.txt
|-- TcpScheduler.cpp
|-- TcpScheduler.h
|-- TcpSession.cpp
|-- TcpSession.h
|-- TimerEventManager.cpp
|-- TimerEventManager.h
|-- UdpScheduler.cpp
|-- UdpScheduler.h
|-- UdpSession.cpp
|-- UdpSession.h
|-- Using
|-- Util.cpp
|-- Util.h
|-- VpnManager.cpp
|-- VpnManager.h
|-- b87db7824271
|-- build
|   |-- CMakeCache.txt
|   |-- CMakeFiles
|   |   |-- 3.7.0
|   |   |   |-- CMakeCCompiler.cmake
|   |   |   |-- CMakeCXXCompiler.cmake
|   |   |   |-- CMakeDetermineCompilerABI_C.bin
|   |   |   |-- CMakeDetermineCompilerABI_CXX.bin
|   |   |   |-- CMakeSystem.cmake
|   |   |   |-- CompilerIdC
|   |   |   |   |-- CMakeCCompilerId.c
|   |   |   |   `-- a.out
|   |   |   `-- CompilerIdCXX
|   |   |       |-- CMakeCXXCompilerId.cpp
|   |   |       `-- a.out
|   |   |-- CMakeDirectoryInformation.cmake
|   |   |-- CMakeOutput.log
|   |   |-- CMakeTmp
|   |   |-- MaggotProxy.dir
|   |   |   |-- AdvertisementServer.cpp.o
|   |   |   |-- CXX.includecache
|   |   |   |-- Channel.cpp.o
|   |   |   |-- ControlSession.cpp.o
|   |   |   |-- DependInfo.cmake
|   |   |   |-- GlobalChannel.cpp.o
|   |   |   |-- MaggotChannel.cpp.o
|   |   |   |-- MaggotGarbageCollector.cpp.o
|   |   |   |-- MaggotPacketQueue.cpp.o
|   |   |   |-- MaggotScheduler.cpp.o
|   |   |   |-- MaggotSender.cpp.o
|   |   |   |-- MaggotSession.cpp.o
|   |   |   |-- MaggotTcpPacket.cpp.o
|   |   |   |-- MaggotUdpChannel.cpp.o
|   |   |   |-- MainScheduler.cpp.o
|   |   |   |-- MptcpSession.cpp.o
|   |   |   |-- OutOfOrderQueue.cpp.o
|   |   |   |-- ProxySocket.cpp.o
|   |   |   |-- Receiver.cpp.o
|   |   |   |-- ReorderingQueue.cpp.o
|   |   |   |-- Retransmitter.cpp.o
|   |   |   |-- Session.cpp.o
|   |   |   |-- SessionKey.cpp.o
|   |   |   |-- SharedLargeBufferPool.cpp.o
|   |   |   |-- TcpScheduler.cpp.o
|   |   |   |-- TcpSession.cpp.o
|   |   |   |-- TimerEventManager.cpp.o
|   |   |   |-- UdpScheduler.cpp.o
|   |   |   |-- UdpSession.cpp.o
|   |   |   |-- Util.cpp.o
|   |   |   |-- VpnManager.cpp.o
|   |   |   |-- build.make
|   |   |   |-- cmake_clean.cmake
|   |   |   |-- depend.internal
|   |   |   |-- depend.make
|   |   |   |-- flags.make
|   |   |   |-- link.txt
|   |   |   `-- progress.make
|   |   |-- Makefile.cmake
|   |   |-- Makefile2
|   |   |-- TargetDirectories.txt
|   |   |-- cmake.check_cache
|   |   |-- feature_tests.bin
|   |   |-- feature_tests.c
|   |   |-- feature_tests.cxx
|   |   `-- progress.marks
|   |-- MaggotProxy
|   |-- Makefile
|   `-- cmake_install.cmake
|-- cmake_install.cmake
|-- df7eca2dfdec
|-- e3255b76c200
|-- empty.c
|-- log.txt
|-- log.txt~
|-- rateCap
|-- second-
|-- sniffer.c
`-- socketOpt.c

7 directories, 148 files
Removing intermediate container fec09156925b
 ---> 996a495e0747
Step 15/17 : RUN stat /home/mohd/project/MaggotProxyTest/build/CMakeFiles/3.7.0/CompilerIdCXX/a.out
 ---> Running in 6fff7ee1a160
  File: '/home/mohd/project/MaggotProxyTest/build/CMakeFiles/3.7.0/CompilerIdCXX/a.out'
  Size: 7168        Blocks: 16         IO Block: 4096   regular file
Device: 2eh/46d Inode: 150866      Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-04-21 14:23:44.000000000 +0000
Modify: 2018-04-21 14:23:44.000000000 +0000
Change: 2018-04-21 14:23:45.834455655 +0000
 Birth: -
Removing intermediate container 6fff7ee1a160
 ---> 157299bfb768
Step 16/17 : RUN chmod +x /home/mohd/project/MaggotProxyTest/build/CMakeFiles/3.7.0/CompilerIdCXX/a.out
 ---> Running in 74c5fd286be5
Removing intermediate container 74c5fd286be5
 ---> bbd04a80e568
Step 17/17 : CMD ["./home/mohd/project/MaggotProxyTest/build/CMakeFiles/3.7.0/CompilerIdCXX/a.out"]
 ---> Running in 2401dbf2ad3e
Removing intermediate container 2401dbf2ad3e
 ---> 00b888454e7e
Successfully built 00b888454e7e
Successfully tagged app_2:latest

Когда я запускаю изображение, используя

 sudo docker run -p 4000:80 my_app

Сообщение об ошибке:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"./home/mohd/project/MaggotProxyTest/build/CMakeFiles/3.7.0/CompilerIdCXX/a.out\": stat ./home/mohd/project/MaggotProxyTest/build/CMakeFiles/3.7.0/CompilerIdCXX/a.out: no such file or directory": unknown.
ERRO[0000] error waiting for container: context canceled 

Это действительно не вопрос C++. Я не уверен, что это вообще вопрос о переполнении стека. Суперпользователи могут быть лучшим местом для этого.

NathanOliver 19.04.2018 23:24
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
1
9 469
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У вас есть опечатка в строфе CMD? Не должно быть ["./home/mohd/project/Test/AppName"]? Без лишнего Имя приложения.

Если это не так, просто запустите stat после шага RUN make, чтобы увидеть, действительно ли файл там.

RUN stat /home/mohd/project/<path>/<to>/<your>/<binary>

Если ничего не появляется, попробуйте посмотреть, что именно создается make и cmake в текущем рабочем каталоге.

RUN tree -x

А также убедитесь, что вы установили исполняемый бит в программе

RUN chmod +x /home/mohd/project/<path>/<to>/<your>/<binary>

Когда я запускаю make с помощью терминала, он генерирует исполняемый файл внутри проекта с именем проекта. Таким образом, тестовый проект будет иметь внутри тестовый файл, поэтому я изменил команду на ["./home/mohd/project/Test/Test"]. И использование состояния показывает, что файл есть, но дерево -x не сработало, не уверен, правильно ли его использовали.

Mohd Alomar 20.04.2018 00:22

Похоже, что в образе докера нет tree внутри, используйте временный шаг, чтобы установить его, прежде чем запускать RUN apt-get update && apt-get install -y tree.

Nicolae 20.04.2018 15:20

Я обновил дерево до и после команды make, а также обновил файл Dockerfile, и я вижу готовый файл в /home/mohd/project/MaggotProxyTest/build/MaggotProxy/. Я не уверен, почему, когда я запускаю изображение, он показывает, что файл не найден. Возможно ли, что докер удалит файл из контейнера после завершения команды сборки?

Mohd Alomar 21.04.2018 16:41

Ваш ответ очень помог мне узнать, как отлаживать небольшой контейнер.

Mohd Alomar 23.04.2018 14:20

Пожалуйста, извините, я пропустил мысль, которую высказал @BMitch, и я благодарю его за ответ, его точка зрения точна и, в отличие от моих точек, предоставила много информации для исследования и устранения некоторых или всех проблем, с которыми вы столкнулись, я рада, что мы помогли!

Nicolae 23.04.2018 19:59
Ответ принят как подходящий

Вы изменили свой текущий каталог здесь:

WORKDIR /home/mohd/project/MaggotProxyTest

И запускаемая вами команда основана на относительном пути, а не на абсолютном пути:

CMD ["./home/mohd/project/MaggotProxyTest/build/CMakeFiles/3.7.0/CompilerIdCXX/a.out"]

Это приводит к поиску исполняемого файла:

/home/mohd/project/MaggotProxyTest/home/mohd/project/MaggotProxyTest/build/CMakeFiles/3.7.0/CompilerIdCXX/a.out

которого не существует. Удалите начальный . из пути вашей команды, чтобы сделать его абсолютным путем.

CMD ["/home/mohd/project/MaggotProxyTest/build/CMakeFiles/3.7.0/CompilerIdCXX/a.out"]

Другие вопросы по теме