代码之家  ›  专栏  ›  技术社区  ›  Alex

如何在Docker容器中启动并保持后台进程

  •  1
  • Alex  · 技术社区  · 7 年前

    我需要在Docker容器(实际上是AppEngine图像)中启动一个后台作业(GoogleSQL代理)。

    以下是Dockerfile:

    FROM eu.gcr.io/google-appengine/ubuntu-php56
    
    ADD ./run.sh /app
    RUN chmod 777 /app/run.sh
    #RUN nohup /app/run.sh & #This is lost the moment I finished creation of container
    CMD nohup /app/run.sh & #This crash the container
    

    以下是run.sh文件:

    #!/bin/bash
    while true
    do
     echo "Beep"
     sleep 2
    done
    

    docker image build --tag red .
    

    以下是创建docker容器的命令:

    docker run -d -p 8080:8080 --name red1 red
    

    下面是我如何连接到容器来检查里面有什么

    docker exec -it red1 /bin/bash
    

    再一次,我的目标是能够吃午饭并一直运行run.sh。

    2 回复  |  直到 7 年前
        1
  •  6
  •   Ignacio Millán    7 年前

    首先,不需要在appengine中运行sql代理,您可以直接连接到数据库实例。

    CMD nohup /app/run.sh & sleep infinity
    

    在这种情况下,前台进程是sleep,您可以为运行应用程序的进程更改它。

        2
  •  1
  •   sebbalex    7 年前

    看一下医生 here

        3
  •  0
  •   Pawel Czuczwara    7 年前

    要充当云SQL代理,我建议使用单独的docker映像,该映像可通过以下命令使用:

    docker pull gcr.io/cloudsql-docker/gce-proxy:1.12
    

    docker run -d \
      -v <PATH_TO_KEY_FILE>:/config \
      -p 127.0.0.1:5432:5432 \
      gcr.io/cloudsql-docker/gce-proxy:1.12 /cloud_sql_proxy \
      -instances=<INSTANCE_CONNECTION_NAME>=tcp:0.0.0.0:5432 -credential_file=/config
    

    这是Postgress的一个例子。对于MySQL,使用3306端口。

    For step by step configuration including all needed scopes and permissions please check documentation .