运行命令不在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命令。

你正在混淆RUNCMDRUN命令是为了build立docker集装箱,因为你正确地做了第​​一个。 第二个命令也会在构build容器时执行,而不是在运行时执行。 如果要在启动Docker容器时执行命令,则应该使用CMD命令。

更多信息可以在Dockerfile参考中find。 例如,你也可以用ENTRYPOINT代替CMD