运行命令不在Dockerfile中调用
这是我的Dockerfile:
# Pull base image (Ubuntu) FROM dockerfile/python # Install socat RUN \ cd /opt && \ wget http://www.dest-unreach.org/socat/download/socat-1.7.2.4.tar.gz && \ tar xvzf socat-1.7.2.4.tar.gz && \ rm -f socat-1.7.2.4.tar.gz && \ cd socat-1.7.2.4 && \ ./configure && \ make && \ make install RUN \ start-stop-daemon --quiet --oknodo --start --pidfile /run/my.pid --background --make-pidfile \ --exec /opt/socat-1.7.2.4/socat PTY,link=/dev/ttyMY,echo=0,raw,unlink-close=0 \ TCP-LISTEN:9334,reuseaddr,fork # Define working directory. WORKDIR /data # Define default command. CMD ["bash"]
我从这个Dockerfile构build一个图像并像这样运行它:
docker run -d -t -i myaccount/socat_test
在此之后,我login到容器并检查socat守护程序是否正在运行。 但事实并非如此。 我刚刚开始玩docker。 我误解了Dockerfile的概念吗? 我希望docker在容器启动时运行socat命令。
你正在混淆RUN
和CMD
。 RUN
命令是为了build立docker集装箱,因为你正确地做了第一个。 第二个命令也会在构build容器时执行,而不是在运行时执行。 如果要在启动Docker容器时执行命令,则应该使用CMD
命令。
更多信息可以在Dockerfile参考中find。 例如,你也可以用ENTRYPOINT
代替CMD
。