仅在docker环境中出现Python错误(名称或服务未知)
我在docker容器中运行了一个python脚本,它应该会向我发送一封包含其结果的电子邮件 在没有docker环境的本地机器上,它可以工作,但在容器中,它给了我以下信息:仅在docker环境中出现Python错误(名称或服务未知),python,docker,Python,Docker,我在docker容器中运行了一个python脚本,它应该会向我发送一封包含其结果的电子邮件 在没有docker环境的本地机器上,它可以工作,但在容器中,它给了我以下信息: grab_immo | Traceback (most recent call last): grab_immo | File "./main.py", line 236, in <module> grab_immo | main() grab_immo | File "./
grab_immo | Traceback (most recent call last):
grab_immo | File "./main.py", line 236, in <module>
grab_immo | main()
grab_immo | File "./main.py", line 229, in main
grab_immo | sendmail(item['link'], item['price'], item['titel'], item['description'])
grab_immo | File "./main.py", line 76, in sendmail
grab_immo | s = smtplib.SMTP(host=SMTP_HOST, port=SMTP_PORT)
grab_immo | File "/usr/local/lib/python3.7/smtplib.py", line 251, in __init__
grab_immo | (code, msg) = self.connect(host, port)
grab_immo | File "/usr/local/lib/python3.7/smtplib.py", line 336, in connect
grab_immo | self.sock = self._get_socket(host, port, self.timeout)
grab_immo | File "/usr/local/lib/python3.7/smtplib.py", line 307, in _get_socket
grab_immo | self.source_address)
grab_immo | File "/usr/local/lib/python3.7/socket.py", line 707, in create_connection
grab_immo | for res in getaddrinfo(host, port, 0, SOCK_STREAM):
grab_immo | File "/usr/local/lib/python3.7/socket.py", line 748, in getaddrinfo
grab_immo | for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
grab_immo | socket.gaierror: [Errno -2] Name or service not known
grab_immo exited with code 0
环境部分:
MY_ADDRESS = os.environ['MY_ADDRESS']
PASSWORD = os.environ['PASSWORD']
SMTP_HOST = os.environ['SMTP_HOST']
SMTP_PORT = os.environ['SMTP_PORT']
谢谢你的阅读
编辑:docker合成零件
environment:
- MY_ADDRESS = yyy@yyy.com
- PASSWORD = yyy
- SMTP_HOST = smtp.strato.de
- SMTP_PORT = 587
取自
dockerfile:
FROM python:3
COPY grab_immo /grab_immo
RUN mkdir /data
ADD ./data/contacts /data
ADD ./data/run.log /data
ADD ./data/template /data
VOLUME /data
WORKDIR /grab_immo
RUN pip install -r requirements.txt
ENV MY_ADDRESS=value \
PASSWORD=value \
SMTP_HOST=value \
SMTP_PORT=587
CMD [ "python", "./main.py" ]
docker-compose.yml
---
version: "2"
services:
grab_immo:
build: .
image: yyy/grab_immo
container_name: grab_immo
environment:
- MY_ADDRESS = 'stuff'
- PASSWORD = stuff
- SMTP_HOST = smtp.strato.de
- SMTP_PORT = 587
volumes:
- /home/yyy/grab_immo_config:/data
restart: unless-stopped
问题是您无法从您提供的
ENV
中获取值。请尝试以下操作:
import os
host = os.environ['SMTP_HOST']
port = os.environ['SMTP_PORT']
s = smtplib.SMTP(host=host, port=port)
什么是
SMTP\u主机
定义为?请参阅docker compose中编辑的帖子。。。这些是否也包含在您的dockerfile中?(即ENV SMTP_HOST${SMTP_HOST}
)?在容器内的/etc/hosts
上为SMTP.strato.de
添加一个条目。要调试它,请在容器内部和外部pingsmtp.strato.de
。基本上,我认为您的错误与主机或端口的值不正确有关(如果存在上述情况,则两者都可能)。可能包括一些打印语句或其他形式的调试来检查容器中的值。你说得有点对,我的脚本中已经有了这一点,但是,一个简单的打印显示dockerfile中的默认值被捕获了,但我真的不明白为什么。需要删除docker compose中=sing周围的空格。。。不,工作很好。非常感谢
import os
host = os.environ['SMTP_HOST']
port = os.environ['SMTP_PORT']
s = smtplib.SMTP(host=host, port=port)