3

これが私の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 からイメージを作成し、次のように実行します。

docker run -d -t -i myaccount/socat_test

この後、コンテナにログインし、socat デーモンが実行されているかどうかを確認します。そうではありません。私はdockerで遊んで始めました。Dockerfile の概念を誤解していますか? コンテナーの起動時に docker が socat コマンドを実行することを期待します。

4

1 に答える 1

5

あなたは混乱RUNしていCMDます。このRUNコマンドは、最初のコンテナーで正しく行ったように、docker コンテナーを構築するためのものです。2 番目のコマンドもコンテナーのビルド時に実行されますが、実行時には実行されません。docker コンテナーの起動時にコマンドを実行する場合は、CMDコマンドを使用する必要があります。

詳細については、Dockerfile リファレンス を参照してください。たとえばENTRYPOINT、代わりに を使用することもできますCMD

于 2015-01-02T09:26:28.280 に答える