目前,我有两个python脚本,一个启动docker容器,另一个启动后在容器内运行。我想把它做成一个单独的文件,它将启动容器,然后在容器中执行其余的代码。这可能吗?如果可能,如何做到?我试过docker python库,并在容器启动后通过ssh连接到容器,但如果不使用这两个脚本,似乎什么都不起作用。提前感谢任何帮助。
9jyewag01#
从你的问题中,你希望有创建docker容器的代码,然后在同一个文件中有只在docker容器内执行的代码。使用以下设置即可实现:
dockerfile
FROM python:3.8-slim-buster WORKDIR /src COPY requirements.txt requirements.txt RUN pip install --no-cache-dir -r requirements.txt COPY . . ENV AM_I_IN_A_DOCKER_CONTAINER=True CMD [ "python", "-m" , "main"]
main.py
import os import subprocess if __name__ == '__main__': # https://stackoverflow.com/questions/43878953/how-does-one-detect-if-one-is-running-within-a-docker-container-within-python SECRET_KEY = os.environ.get('AM_I_IN_A_DOCKER_CONTAINER', False) if not SECRET_KEY: print(f"Code running to create container.") process = subprocess.Popen(["docker", "build", "--tag", "stackoverflow-question", "."]) process.wait(timeout=60) process.terminate() print(f"Created image: 'stackoverflow-example'") process = subprocess.Popen(["docker", "run", "--publish", "5000:5000", "stackoverflow-question"]) process.wait(timeout=60) print(f"Created container: 'stackoverflow-example'") print(f"Terminating primary script.") exit() import numpy as np print(f"\nWelcome inside the container.") print(f"This will be running inside the container only.") print(np.random.randint(1, 255, 10))
requirements
numpy
该方法分两步进行。首先,我们需要执行代码来创建docker镜像并启动容器。上面的代码使用subprocess创建一个新的映像,其中包含main.py和requirements.txt文件。然后在容器中,我们还指定它应该运行main.py文件。其次,我们必须区分在容器内部和外部运行的是来自main.py的哪些代码。这是通过使用来自凯尔Truong(43878953)的帖子来完成的,该帖子是变量AM_I_IN_A_DOCKER_CONTAINER。现在,我们可以将main.py文件拆分为一个部分,以便在容器之前和容器之后运行。
subprocess
requirements.txt
AM_I_IN_A_DOCKER_CONTAINER
这段代码将在 * 每次运行 * 时启动一个新的docker容器,所以请确保关闭它们。
1条答案
按热度按时间9jyewag01#
从你的问题中,你希望有创建docker容器的代码,然后在同一个文件中有只在docker容器内执行的代码。
使用以下设置即可实现:
dockerfile
main.py
requirements
流程
该方法分两步进行。
首先,我们需要执行代码来创建docker镜像并启动容器。上面的代码使用
subprocess
创建一个新的映像,其中包含main.py
和requirements.txt
文件。然后在容器中,我们还指定它应该运行main.py
文件。其次,我们必须区分在容器内部和外部运行的是来自
main.py
的哪些代码。这是通过使用来自凯尔Truong(43878953)的帖子来完成的,该帖子是变量AM_I_IN_A_DOCKER_CONTAINER
。现在,我们可以将main.py
文件拆分为一个部分,以便在容器之前和容器之后运行。旁注
这段代码将在 * 每次运行 * 时启动一个新的docker容器,所以请确保关闭它们。